THttpClient 未在 Delphi 中关闭连接
THttpClient is not closing connection in Delphi
我的软件包含以下发布到 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;
这是 WinHttp 的一项功能,它使 TCP 连接保持活动状态一段时间以便更快地重用它们,您可以通过在请求中禁用此选项来禁用它。
OptionValue := WINHTTP_DISABLE_KEEP_ALIVE;
WinHttpSetOption(RequestHandle, WINHTTP_OPTION_DISABLE_FEATURE, @OptionValue, sizeof(OptionValue));
但是在 Delphi THttpClient
中没有简单的方法来设置这个选项,为此你必须将 System.Net.HttpClient.Win.pas
和 System.Net.HttpClient.pas
复制到你的项目中并修改 System.Net.HttpClient.Win.pas
以添加此代码
下面的呢
HttpClient.SetRequestHeader('Connection', 'close');
我的软件包含以下发布到 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;
这是 WinHttp 的一项功能,它使 TCP 连接保持活动状态一段时间以便更快地重用它们,您可以通过在请求中禁用此选项来禁用它。
OptionValue := WINHTTP_DISABLE_KEEP_ALIVE;
WinHttpSetOption(RequestHandle, WINHTTP_OPTION_DISABLE_FEATURE, @OptionValue, sizeof(OptionValue));
但是在 Delphi THttpClient
中没有简单的方法来设置这个选项,为此你必须将 System.Net.HttpClient.Win.pas
和 System.Net.HttpClient.pas
复制到你的项目中并修改 System.Net.HttpClient.Win.pas
以添加此代码
下面的呢
HttpClient.SetRequestHeader('Connection', 'close');