2012-06-05 59 views
0

我得到了一個古怪的問題。我試圖通過使用WebRequest和WebClient來自動訪問一個網站。我已經觀察到Firebug中的所有發佈請求標題鍵值對和發佈的數據字符串(請求標題和發佈標籤)。然後我用WebRequest模擬這樣的請求,並將所有頭部參數和發佈的數據放在那裏。但是,當我從這個請求實例中執行GetResponse()時,我總是收到一個錯誤頁面,表示某個sessionID缺少。HttpWebRequest模擬螢火蟲的請求總是失敗

其實我已經注意到在先前(第一步打開登錄頁面)響應會話cookie在請求的標頭的cookie字段。通過模擬請求登錄頁面(第1頁),我可以得到正確的響應,但無法通過此認證頁面。我的帖子數據如下:userid = John & password = 123456789 & domain = highmark.And每次成功瀏覽器執行的認證頁面請求。

我是否在請求中缺少可能不會顯示的東西?如果是,可以給我一些關於可能檢查瀏覽器發送的請求的工具的建議。

回答

0

我已經解決了這個問題。問題是我設置了httpWebRequest實例的AllowAutoRedirect = true。因此,效果是當我從服務器獲得第一個響應時,httpWebRequest將不斷髮出另一個請求,請求在響應標頭的位置字段中回覆的另一個URL。

HttpWebRequest類的缺點是當它被重定向時,它在下一個請求頭中不包括Set-Cookies(Response's Header Field)的cookie,因此服務器會拒絕這樣的頁面請求並可能再次重定向到另一個不同的頁面。

而httpWebRequest.GetResponse()方法只會在AllowAutoRedirect = true設置下返回最後一個響應的頁面。我得到的迴應完全不同於我的預期。

也在這個求解過程中,我需要感謝一個區分Http Traffic檢查工具:IEInspector Http Analyzer(http://www.ieinspector.com/httpanalyzer/)。這個工具的強大功能是它不僅可以檢查來自瀏覽器的http流量,還可以檢查您的進程的httpWebRequest產生的的。還可以以文本格式顯示這些請求和響應的原始流。雖然它是一個商業軟件,但您可以嘗試15天。我對它告訴我的內容感到非常滿意(在形式細節方面),我也喜歡購買它。