THttpClient 未关闭 Delphi 中的连接

And*_*zej 2 delphi tcp sysinternals delphi-10.2-tokyo

我的软件包括以下用于发布到 URL 的功能。我正在使用 Sysinternals TCPView 来查看连接。发布到 URL 后连接未关闭。我应该如何更改立即关闭连接的代码?

function PostURL(const AURL: string; Parameters: TStrings): string;
var
  HttpClient: THttpClient;
  HttpResponse: IHttpResponse;
begin
  HttpClient := THTTPClient.Create;
  try
    HttpClient.ConnectionTimeout:=3000;
    HttpClient.ResponseTimeout:=3000;
    HttpResponse := HttpClient.Post(AURL, Parameters, nil, TEncoding.UTF8);
    Result := HttpResponse.ContentAsString();
  finally
    HttpClient.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

Eug*_*neK 5

这是 WinHttp 的一个特性,它使 TCP 连接保持活动一段时间以更快地重用它们,您可以通过在请求中禁用此选项来禁用它。

OptionValue := WINHTTP_DISABLE_KEEP_ALIVE;
WinHttpSetOption(RequestHandle, WINHTTP_OPTION_DISABLE_FEATURE, @OptionValue, sizeof(OptionValue));
Run Code Online (Sandbox Code Playgroud)

但设置在Delphi中这个选项没有简单的方法THttpClient,要做到这一点,你必须复制System.Net.HttpClient.Win.pasSystem.Net.HttpClient.pas到您的项目并修改System.Net.HttpClient.Win.pas添加此代码