簡體   English   中英

HttpWebResponse.GetResponse()fiddler說“響應頭解析失敗。 ”

[英]HttpWebResponse.GetResponse() fiddler says “Response Header parsing failed. ”

我正在通過HttpWebRequest / HttpWebResponse對象向網站發出請求。

我正在幾次成功調用該網站,並且對同一動態頁面的每次其他調用都失敗了。

在調試器中我得到一個“內部服務器錯誤500”fiddler也顯示500響應並包含:

[Fiddler] Response Header parsing failed.
This can be caused by an illegal HTTP response earlier on this reused server socket--     for instance, a HTTP/304 response which illegally contains a body.
Response Data:
<plaintext> 
0D 0A 3C 21 44 4F 43 54 59 50 45 20 48 54 4D 4C 20 50 55 42 4C 49 43 20  ..<!DOCTYPE      HTML PUBLIC 
22 2D 2F 2F 57 33 43 2F 2F 44 54 44 20 48 54 4D 4C 20 34 2E 30 20 54 72  "-//W3C//DTD HTML 4.0 Tr
61 6E 73 69 74 69 6F 6E 61 6C 2F 2F 45 4E 22 3E 0D 0A 3C 48 54 4D 4C 3E  ansitional//EN">..<HTML>
0D 0A 09 3C 48 45 41 44 3E 0D 0A 09 09 3C 74 69 74 6C 65 3E 56 69 65 77  ...<HEAD>....<title>View

我刪除了所有的十六進制並查看了頁面,這是我期望返回的,但由於某種原因,服務器報告500並且HttpWebRequest對象在此引發異常。

我已經為這個問題嘗試了所有其他“修復”,但都沒有工作。 它可能只是從服務器發送的格式錯誤的數據,但是使用的是比HttpWebRequest更低級別的對象,它不是一個可以使用的皮塔?

編輯:我沒有在上面的例子中包含整個十六進制/整個html塊。
編輯:關閉提琴手我在調試器中得到這個

編輯:所以,從我看到的HttpWebResponse對象相應的行為。 服務器只是片狀,有時會返回具有不同http狀態代碼的相同精確數據。 為了快速修復,我只是將每個調用包裝在try / catch和catch塊中,只是重新編寫完全相同的調用。 到目前為止它工作得很好並且半證明它是站點故障而不是HttpWebResponse對象。

The server committed a protocol violation. Section=ResponseStatusLine

HTTP 304響應意味着自您上次點擊頁面以來頁面內容沒有改變(他們可能正在使用緩存)。 不經常點擊頁面或緩存響應以便在遇到此情況時使用。

編輯

服務器正在發送包含數據的無效304響應。 這違反了HTTP規范,HttpWebResponse / Fiddler正在有效地將其轉換為500。

編輯

如果在app.config中使用以下設置,則可以繼續使用HttpWebRequest / HttpWebResponse

<configuration>
    <system.net>
        <settings>
            <httpWebRequest useUnsafeHeaderParsing="true" />
        </settings>
    </system.net>
</configuration> 

黑Jon,

沒有Fiddler會有同樣的結果嗎? (只是在屏幕上打印例外)。 我有時遇到調試器錯誤行為的麻煩。

如果服務器返回間歇性錯誤並且你無法控制它,我恐怕你做不了多少。 消息似乎很明顯,這是304的標准,響應不應該有一個正文,但服務器可以做任何想做的事情,所以它幾乎是要解決的問題。

見W3C: http//www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

如果客戶端已執行條件GET請求並允許訪問,但文檔尚未修改,則服務器應該響應此狀態代碼。 304響應必須不包含消息體,因此總是在頭字段之后的第一個空行終止。

關於HttpWebRequest,我從來沒有遇到任何問題,也從未聽說過任何無法處理HTTP通信的情況。 但是,如果你想要自己瘋狂處理數據包,谷歌如何使用套接字構建自己的HttpWebRequest。

這個項目可能是一個開始: http//www.codeproject.com/Articles/13486/A-Simple-Crawler-Using-C-Sockets

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM