访问原文请点击 这里
Delphi 10.1进一步改进自Delphi 10带来的Http访问控件TNetHttpClient,支持异步访问,同时增加ConnectionTimeout及ResponseTimeout两个超时属性。你也许会问,这有什么?其他的语言早就有了,而我想到的确实别看这些常规的功能增加,他可以跨平台的啊,熟知Delphi跨平台的开发者一说就明白,这是跨win,osx,android,ios的,今年底还要linux.我又说多了,好象劝你也来用delphi似的。
我们看一下如何使用异步处理Http请求。
- 设置Asynchronous=true,默认值是False.
- 发出http请求:
ss:=TStringStream; NetHttpClient1.Get('http://www.baidu.com',ss);
这里,SS参数是任选的,可不填,如果填上,请求完成时,返回结果在SS中。
- 在NetHttpClient1的OnRequestCompleted事件接收结果
看帮助,Get方法返回一个接口对象,通过这个对象的ContentStream也可以处理返回结果。
总结上面,就是有三种方式来接收结果:
- 用Get的参数来接收
- 用Get的返回值接收
- 利用RequestCompleted事件参数来接收
为了知道请求何时完成,都要用到这个RequestCompleted事件,有朋友说,这样调用碎片化,不利于编码,如何利用现在常用的直接支持异步的写法,直接回调指定的方法。我认为将NetHttpClient封装到一个通用的过程中,支持回调函数就行了,类似下面这样,然后在这个方法中使用NetHttpClient对象执行aUrl,在完成事件中回调aCallBackMethod:
procedure ExecuteHttpRequest(aUrl:string;aCallBackMethod);
[俺给备注下]
实际上 TNetHttpClient 封装的是 THttpClient,你在代码中直接用 THttpClient.BeginGet,它有匿名函数的回调版本,详细信息看帮助。