2011-12-19 69 views
2

我在C做一個簡單的http頁面請求者。它使用套接字向主機發送HTTP/1.0 GET請求,並解析答案以有效地下載html文件。 然而,當我發送的請求是這樣的:爲什麼我的HTTP/1.0 GET請求返回OK但沒有正文內容?

GET http://stackoverflow.com/questions HTTP/1.0 
User-Agent: myRequester/1.0 

它返回

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Date: Mon, 19 Dec 2011 15:28:08 GMT 
Content-Length: 54362 
Connection: close 

但正文內容。

是的,我已經把CRLF放在每一行的末尾和一個空行。 我通過一個連接只使用一個套接字。而且我還必須堅持使用HTTP/1.0。

+0

您確定您確實正在閱讀完整回覆嗎?這些標頭確實表明服務器正在發送一個正文。 – ibid 2011-12-19 15:48:40

+0

是的,我確定。我已經通過recv()返回檢查了答案長度,之後strlen()編輯了緩衝區。 – alexdantas 2011-12-19 15:49:53

+0

但是你讀到底了嗎?請注意,recv並不一定會在一次調用中讀取完整的響應;您應該重複呼叫,直到recv報告連接已結束。 – ibid 2011-12-19 15:53:37

回答

3

最可能的解釋是,服務器實際上正在發送一個正文,但是你沒有閱讀全部內容。大多數網絡系統並不一定會在一次函數調用中返回所有的響應,因爲即使預期的次數更多,他們也會立即返回立即返回的數據。

當連接結束時,Unix系統調用recv返回零。你應該一直調用它,直到你得到零或錯誤。

+0

絕對正確。我很抱歉浪費這樣的問題。 – alexdantas 2011-12-19 16:06:37

相關問題