delphi 如何使用异步 TNetHTTPClient  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 如何使用异步 TNetHTTPClient


在异步模式下,顾名思义,客户端在后台线程中异步运行请求。


执行以下代码时,ContentAsString失败,因为此时请求未完成。


output := httpclient.Get('https://google.com').ContentAsString

如果要在异步模式下使用 HTTP 客户端,则必须在请求完成后使用完成处理程序来运行适当的代码。


procedure TForm1.Button1Click(Sender: TObject);

var

  httpclient: TNetHTTPClient;

begin

  httpclient := TNetHTTPClient.Create(nil);

  httpclient.Asynchronous := True;

  httpclient.OnRequestCompleted := HTTPRequestCompleted;

  httpclient.Get('https://google.com');

end;


procedure TForm1.HTTPRequestCompleted(const Sender: TObject; const AResponse: IHTTPResponse);

var

  output: string;

begin

  output := AResponse.ContentAsString;

  Sender.Free;

end;

在异步模式下使用 HTTP 客户端通常比从后台线程在同步模式下使用它更复杂(特别是从内存管理方面)。


以下是使用匿名后台线程的等效示例:


procedure TForm1.Button1Click(Sender: TObject);

begin

  TThread.CreateAnonymousThread(

    procedure

    var

      httpclient: TNetHTTPClient;

      output: string;

    begin

      httpclient := TNetHTTPClient.Create(nil);

      try

        httpclient.Asynchronous := False;

        output := httpclient.Get('https://google.com').ContentAsString;

      finally

        httpclient.Free;

      end;

    end).Start;

end;

当然,您也可以使用TTask或自定义线程来代替匿名线程。



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.084750175476074 seconds