代码之家  ›  专栏  ›  技术社区  ›  ar099968

Delphi发送HTTP GET请求而不等待服务器响应

  •  2
  • ar099968  · 技术社区  · 6 年前

    我希望发送HTTP请求(GET),而不等待服务器响应。

    我试过了 IdHTTP 忽略回答,例如:

    aIdHTTP := TIdHTTP.create;
    try
      aIdHTTP.Get('https://stackoverflow.com/');
    finally
      aIdHTTP.free;
    free
    

    但它总是等待服务器响应…

    一个技巧是通过在 TIdHTTP.OnWork 事件发生时间 AWorkMode wmRead ,这会更快地关闭连接…但等待“第一字节”响应。

    有没有一种不等待响应就发送数据的方法?

    1 回复  |  直到 6 年前
        1
  •  10
  •   Remy Lebeau    6 年前

    TIdHTTP

    TIdHTTP.OnWork TIdHTTP.ReadTimeout

    TIdHTTP.OnHeadersAvailable

    hoNoReadChunked TIdHTTP.HTTPOptions

    TIdTCPClient

    aIdClient := TIdTCPClient.Create;
    try
      aIdClient.Host := 'stackoverflow.com';
      aIdClient.Port := 443;
    
      aIdClient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(aIdClient);
      TIdSSLIOHandlerSocketOpenSSL(aIdClient.IOHandler).PassThrough := False;
    
      aIdClient.Connect;
      try
        aIdClient.IOHandler.WriteLn('GET / HTTP/1.1');
        aIdClient.IOHandler.WriteLn('Host: stackoverflow.com');
        aIdClient.IOHandler.WriteLn('Connection: close');
        aIdClient.IOHandler.WriteLn;
      finally
        aIdClient.Disconnect;
      end;
    finally
      aIdClient.free;
    end;
    

    aIdClient := TIdTCPClient.Create;
    try
      aIdClient.Host := 'stackoverflow.com';
      aIdClient.Port := 443;
      aIdClient.Connect;
      aIdClient.Disconnect;
    finally
      aIdClient.free;
    end;
    

    TIdHTTP.Head() TIdHTTP.Get()

    aIdHTTP.Head('https://stackoverflow.com/');