2013-02-17 65 views
1

獲取POST數據我想從TIdHTTPProxyServer後的數據,使用OnHTTPBeforeCommand或OnHTTPDocument事件,但都毫無用處。 我該怎麼做?從TIdHTTPProxyServer

順便說一句,我使用的是印10,但其他解決方案(與突觸,例如)將是涼爽。

在此先感謝。

回答

1

POST數據在OnHTTPBeforeCommand事件中不可用,因爲它尚未從套接字中讀取。該事件中只有HTTP標頭可用。在OnHTTPDocument事件,但只有在下列條件下

POST數據是可用的:

  1. POST請求使用非零Content-Length報頭(如TIdHTTPProxyServer尚不支持Transfer-Encoding頭處理壓縮/分塊的HTTP消息)。

  2. TIdHTTPProxyServerContext.TransferMode屬性爲tmFullDocumentOnHTTPBeforeCommand事件退出時。默認情況下,TransferMode設置爲與TIdHTTPProxyServer.DefaultTransferMode屬性相同的值,默認爲tmFullDocument

  3. 客戶端將POST請求直接發送到TIdHTTPProxyServer,指定一個完整的URL作爲目標。如果客戶端,而不是直接發送CONNECT請求TIdHTTPProxyServer建立隧道到目標服務器,然後通過隧道向目標服務器發送POST請求(例如,建立HTTPS請求SSL會話時),TIdHTTPProxyServer不公開訪問到那個數據。這是從一個套接字到另一個套接字的直通過程。

+0

我覺得我得到的最後一個情況..很傷心,但感謝! – Keeper 2013-02-20 22:29:57

+0

在#3中攔截數據的唯一方法是將一個攔截組件附加到'AContext.Connection.IOHandler.Intercept'屬性,但是隨後您必須手動解析原始HTTP(可能是SSL)數據攔截。 – 2013-02-20 22:45:44

+0

您的意思是在OnHTTPBeforeCommand中設置TIdServerCompressionIntercept? – Keeper 2013-02-21 00:08:59