如何阅读网络回复的内容?

时间:2013-10-21 16:12:05

标签: c# fiddler fiddlercore

如何阅读网络回复的内容?我尝试使用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);
}

1 个答案:

答案 0 :(得分:2)

使用UTF8.GetString()会错误地假设内容是原始的UTF-8字节;它可能是任何其他编码。

相反,您应该使用oSession.GetResponseBodyAsString()方法。现在,请记住,如果响应实际包含一个正文,则只返回一个字符串。例如,如果它是HTTP/304响应(意思是“从缓存中重用版本”),则不会有正文字节。但是,您会看到OnReadResponseBuffer仍然会触发,因为HTTP / 304标头块将通过该函数传递。