[转]红鱼儿:TNetHttpClient支持异步访问(Delphi 10.1 Berlin)

访问原文请点击 这里

Delphi 10.1进一步改进自Delphi 10带来的Http访问控件TNetHttpClient,支持异步访问,同时增加ConnectionTimeout及ResponseTimeout两个超时属性。你也许会问,这有什么?其他的语言早就有了,而我想到的确实别看这些常规的功能增加,他可以跨平台的啊,熟知Delphi跨平台的开发者一说就明白,这是跨win,osx,android,ios的,今年底还要linux.我又说多了,好象劝你也来用delphi似的。

我们看一下如何使用异步处理Http请求。

  1. 设置Asynchronous=true,默认值是False.
    d10.1nethttpclient
  2. 发出http请求:
    ss:=TStringStream;
    NetHttpClient1.Get('http://www.baidu.com',ss);

    这里,SS参数是任选的,可不填,如果填上,请求完成时,返回结果在SS中。

  3. 在NetHttpClient1的OnRequestCompleted事件接收结果

看帮助,Get方法返回一个接口对象,通过这个对象的ContentStream也可以处理返回结果。

总结上面,就是有三种方式来接收结果:

  1. 用Get的参数来接收
  2. 用Get的返回值接收
  3. 利用RequestCompleted事件参数来接收

为了知道请求何时完成,都要用到这个RequestCompleted事件,有朋友说,这样调用碎片化,不利于编码,如何利用现在常用的直接支持异步的写法,直接回调指定的方法。我认为将NetHttpClient封装到一个通用的过程中,支持回调函数就行了,类似下面这样,然后在这个方法中使用NetHttpClient对象执行aUrl,在完成事件中回调aCallBackMethod:
procedure ExecuteHttpRequest(aUrl:string;aCallBackMethod);

[俺给备注下]

实际上 TNetHttpClient 封装的是 THttpClient,你在代码中直接用 THttpClient.BeginGet,它有匿名函数的回调版本,详细信息看帮助。

分享到: