2013-10-21 46 views
0

如何閱讀網站回覆的內容?我嘗試使用FiddlerCore來檢查響應。可以隔離正確的請求和響應。但我只能得到正在發送的文件的標題。我需要這些內容。但在AfterSessionComplete方法中它總是空的。似乎在OnReadResponseBuffer方法中有一些二進制數據。也許它是如標題所示的gzip壓縮?關於如何閱讀回覆內容的任何想法。不使用提琴手的想法也受到歡迎。如何閱讀網站回覆的內容?

void FiddlerApplication_AfterSessionComplete(Fiddler.Session oSession) 
{ 
    listBox1.Invoke(new UpdateUI(() => 
    { 
     if (oSession.PathAndQuery.Contains("mobj.php")) 
     { 
      listBox1.Items.Add(" " + oSession.fullUrl); 
      byte[] body = oSession.ResponseBody; 
      string body_string = System.Text.Encoding.UTF8.GetString(body); // always empty 
     } 
    })); 
} 

static void FiddlerApplication_OnReadResponseBuffer(object sender, RawReadEventArgs e) 
{ 
    string bla = ""; 

    if (e.sessionOwner.fullUrl.Contains("mobj.php")) 
     bla = System.Text.Encoding.UTF8.GetString(e.arrDataBuffer); 
} 
+2

是否有你需要用FiddlerCore來做的理由?你可以使用System.Net.Http.HttpClient,它會簡單得多。 –

+0

「不使用提琴手的想法也受到歡迎」 - 如果您使用Fiddler改變實際的請求/響應,我不確定如何不使用它的對象會有所幫助。但是,如果你正在做一般的網頁抓取,它的普通班級沒問題。請說明是否需要查看HTTP流量或確保特定請求得到特定響應(「WebClient」類可以輕鬆實現)。 –

+0

該網站是動態生成的。我想查看的請求會在一堆javascript代碼生成url後加載。這就是爲什麼我選擇使用WebBrowser控件,然後添加小提琴作爲監聽器。 –

回答

2

使用UTF8.GetString()使得錯誤的假設該內容是原始UTF-8字節;它可能是任何其他編碼。

相反,您應該使用oSession.GetResponseBodyAsString()方法。現在請記住,如果響應實際上包含一個主體,這隻會返回一個字符串。例如,如果是HTTP/304響應(意思是「從緩存中重新使用版本」),則不會有主體字節。但是,您會看到OnReadResponseBuffer仍會觸發,因爲HTTP/304標題塊將通過該函數傳遞。