【问题标题】:How to view the headers sent by HttpWebRequest如何查看 HttpWebRequest 发送的 headers
【发布时间】:2009-09-30 10:00:51
【问题描述】:

我正在使用 HttpWebRequest 抓取网站,但该网站返回错误。当我从浏览器中点击该页面时,该页面工作正常。我想比较它们以查看可能导致错误的原因。我知道如何拦截来自浏览器的请求以检查标头,但是如何查看 HttpWebRequest 发送的数据?

【问题讨论】:

    标签: c#


    【解决方案1】:

    为了比较您在代码中所做的事情和浏览器所做的事情,我相信像Fiddler 这样的 HTTP 调试工具会是最简单的解决方案。

    Fiddler 充当客户端和服务器之间的代理,并显示通过 HTTP 协议发送的所有信息。

    您可能需要配置您的 .NET 应用程序以使用 Fiddler 提供的代理。 This blog post 提供了有关该主题的详细信息。

    【讨论】:

      【解决方案2】:

      http://www.fiddler2.com/fiddler2/ 是处理此类事情的绝佳工具。

      【讨论】:

        【解决方案3】:

        Firebug 的网络面板将显示所有请求,包括标头。

        编辑:我一发布,您就已经知道如何在浏览器中进行操作了。试试 Headers 属性:

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.stackoverflow.com");
        request.Method = "GET";
        HttpWebResponse response = (HttpWebResponse) request.GetResponse();
        Console.WriteLine(response.Headers);
        

        【讨论】:

        • 我知道如何从我的浏览器查看请求。我想知道如何查看 .NET 对 HttpWebRequest 的作用。
        • 我想查看请求标头,而不是响应标头。当我检查 request.Headers 时,它们是空的。我猜 Headers 集合仅用于指定标题,而不是用于检查它将使用什么?
        • 用 C# 中的答案更新。 HttpWebRequest 和 HttpWebResponse 都具有 Headers 属性,可以为您提供所需的内容。
        • 当我用我的示例代码尝试它时,将 response.Headers 替换为 request.Headers,我得到:Host: stackoverflow.com Connection: Keep-Alive
        • 看起来 request.Headers 直到 GetResponse() 调用之后才被填充,因为如果我将 Console.WriteLine 向上移动一行,它对我来说是空的。
        【解决方案4】:

        您可以通过 Headers 属性从 HTTPWebRequest 获取标头。来自 MSDN:http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.headers.aspx

        【讨论】:

        • 是的,但请参阅上面 Chris Doggett 的回答中的 cmets。在提交请求之前不会填充标头。
        【解决方案5】:

        我不知道是否有一个通用的解决方案。但是,如果您使用的是 Firefox,两个附加组件中的任何一个都会有所帮助:Firebug 或 LiveHTTPHeaders。

        【讨论】:

        • 我知道如何从我的浏览器查看请求。我想知道如何查看 .NET 对 HttpWebRequest 的作用。
        猜你喜欢
        • 2020-07-28
        • 2017-08-03
        • 2010-12-12
        • 1970-01-01
        • 2017-09-04
        • 1970-01-01
        • 2014-04-12
        • 1970-01-01
        • 2011-04-19
        相关资源
        最近更新 更多