THttpClient не закрывает соединение в 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;
1 ответ
Решение
Это особенность 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');