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');
Другие вопросы по тегам