1

我正在尝试使用 OnHTTPBeforeCommand 或 OnHTTPDocument 事件从 TIdHTTPProxyServer 获取发布数据,但一切都没用。我怎样才能做到这一点?

顺便说一句,我使用的是 Indy 10,但其他解决方案(例如突触)会很酷。

提前致谢。

4

1 回答 1

1

POST事件中的数据不可用OnHTTPBeforeCommand,因为尚未从套接字中读取它。在该事件中只有 HTTP 标头可用。

POST事件中的数据可用OnHTTPDocument,但仅在以下条件下可用:

  1. POST请求使用非零Content-Length标头(因为TIdHTTPProxyServer尚不支持Transfer-Encoding标头来处理压缩/分块的 HTTP 消息)。

  2. TIdHTTPProxyServerContext.TransferMode属性是tmFullDocument事件OnHTTPBeforeCommand退出的时间。默认情况下,设置为与属性TransferMode相同的值,这是默认情况下。TIdHTTPProxyServer.DefaultTransferModetmFullDocument

  3. 客户端将POST请求直接发送到TIdHTTPProxyServer,指定一个完整的 URL 作为目标。如果客户端直接发送CONNECT请求TIdHTTPProxyServer以建立到目标服务器的隧道,然后POST通过隧道将请求发送到目标服务器(例如,在为 HTTPS 请求建立 SSL 会话时),TIdHTTPProxyServer则不会公开对该数据的访问。它是从一个插座到另一个插座的直接通路。

于 2013-02-20T18:14:38.913 回答