2013-10-21 44 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标题块将通过该函数传递。