我正在用TIdHttpServer编写HTTP服务器,并且我想正确记录所有流量(完整的HTTP请求)。我为此找到了几个类似的主题,但是在这些主题中我都找不到可以保证响应是否实际发送的保证。
我知道如果无法发送响应,则会在function TIdCustomHTTPServer.DoExecute(AContext:TIdContext): boolean;
的Indy中触发一个异常,但是该异常也可能在发送响应后发生(并且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;