2011-01-30 64 views
4

我使用印idHTTP對象從服務器請求XML數據。一旦發出請求,服務器發送一個回覆,並且我可以讀取回復頭:OK: result:= IdHTTP1.Response.ResponseText;然後德爾福 - 利用Indy HTTP客戶端發送一個響應返回給服務器

他們的系統繼續以規則的間隔,直到在預定的超時時段期滿發送未經請求的XML數據。

但是,客戶現在希望我的客戶端應用程序每次我接收數據(基於XML的成功解析響應)時間給他們發送HTTP響應返回。

我可以工作,如何發送響應,如果我是服務器,但我怎麼能產生一個響應頭,用我idHTTP1客戶端後(或放,發送等)只是頭。

這是我認爲,在RFC 2616不完全定義的,如服務器通常發送HTTP響應,而不是客戶端,即:

6響應

「接收和解釋的請求後消息,服務器用HTTP響應消息響應 。「

我以爲我可以使用TIdHTTPResponseInfo並使用WriteHeader方法,但不能解決如何設置鏈接到URL我需要回復,如果我是客戶端。

我使用德爾福XE和印10.5.7

我已經嘗試了多種方法,但沒有成功。

任何幫助或可能的代碼示例非常感謝!

+0

`TIdHttp`是CLIENT HTTP組件,它等同於Web瀏覽器。有人如何定期向你發送'未經請求的XML數據',直到預定的超時時間到期爲止?這就像是說:`在Google搜索之後,我一直在瀏覽器中獲取新的網頁,直到預定的時間到期。 – 2011-01-30 12:57:49

+0

@Cosmin重新讀取RFC 2616.這是可能的。 – 2011-01-30 13:00:51

回答

4

您的問題可以分爲兩部分:(a)必須發送哪些數據到服務器以通知服務器,以及(b)如何使用IdHTTP發送此數據。

雖然發送數據流,直到連接被關閉對應於HTTP標準,HTTP是一種請求 - 響應協議。如果客戶端收到數據作爲響應,那麼它不能回覆它自己的響應 - 客戶端只能發送另一個請求。所以你的任務是弄清楚服務器接受什麼樣的請求來確認數據接收。一旦你確定了這一點,你將能夠找到如何(如果)使用IdHTTP。

更新:如果您應該將200 OK 發送到服務器,那麼這不符合HTTP協議規範。您可以嘗試訪問HTTP客戶端後面的套接字併發送7個字節(200 OK + CRLF)。

1

如果服務器希望客戶端發送每個XML回覆的確認,那麼服務器不會實現實際的HTTP協議,因爲這是不允許的行爲。更有可能的是,他們正在實現自己的自定義協議,它模仿但不是HTTP。例如,SIP具有許多與HTTP相似的特徵,許多不是(例如對單個請求的多個回覆)。

你需要找出服務器真正實現的協議類型。您將無法使用TIdHTTP。直接使用TIdTCPClient。然後你可以發送和接收數據,但是你需要。

相關問題