Delphi TIdHttpServer: все трафик может быть зарегистрирован? - PullRequest
0 голосов
/ 11 февраля 2019

Я пишу HTTP-сервер с TIdHttpServer и хочу правильно регистрировать все трафик (полные HTTP-запросы).Я нашел несколько похожих тем для этого, но ни в одной из них я не могу найти гарантию, был ли ответ фактически отправлен или нет.
Я знаю, что исключение будет вызвано в Indy в function TIdCustomHTTPServer.DoExecute(AContext:TIdContext): boolean;, если ответ не может быть отправлен, но это исключение также могло произойти ПОСЛЕ того, как ответ был отправлен (и TIdHttpServer ожидает следующей команды).Есть ли способ узнать, была ли команда действительно отправлена ​​или нет?

В приведенном ниже примере мне удалось правильно зарегистрировать входящие сообщения, но я не нашел правильного способа определить, был ли отправлен ответ или нет.

procedure TfmMain.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  //log the incoming request
  Log(getIdConnPeerAsStr(AContext) {IP:port} + (ARequestInfo.RawHTTPCommand + ARequestInfo.RawHeaders.Text));

  //Prepare the response
  AResponseInfo.ContentType := 'text/html';
  AResponseInfo.CharSet := 'utf-8';
  AResponseInfo.ContentText := '<html><body>Hello</body></html>';

  //How to log the output(AResponseInfo) here?  It is too soon because the sending of the packet has not yet occurred
end;
...