如何查看HttpWebRequest发送的标头

7

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

5个回答

9
为了比较代码中的操作和浏览器的操作,我相信像 Fiddler 这样的HTTP调试工具是最简单的解决方案。
Fiddler充当客户端和服务器之间的代理,并显示通过HTTP协议发送的所有信息。
您可能需要配置.NET应用程序以使用Fiddler提供的代理。这篇博客文章提供了有关该主题的详细信息。

7

2
Firebug 的网络面板将显示所有请求,包括头文件。 编辑:我发布之后看到你已经知道如何在浏览器中执行此操作。尝试使用 Headers 属性。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.stackoverflow.com");
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
Console.WriteLine(response.Headers);

1
我知道如何查看浏览器发送的请求。我想知道如何查看.NET对HttpWebRequest的处理过程。 - Jeremy Stein
1
我想查看请求头,而不是响应头。当我检查request.Headers时,它们为空。我猜Headers集合仅用于指定头信息,而不能用于检查将要使用的内容? - Jeremy Stein
使用C#更新答案。HttpWebRequest和HttpWebResponse两者都有Headers属性,可以给你想要的东西。 - Chris Doggett
当我尝试使用我的示例代码并将response.Headers替换为request.Headers时,我会得到以下结果:主机:stackoverflow.com 连接:保持活动状态 - Chris Doggett
看起来请求的 Headers 直到 GetResponse() 调用后才被填充,如果我将 Console.WriteLine 上移一行,它会是空的。 - Chris Doggett

0

1
是的,但请参见上面Chris Doggett答案中的评论。头信息直到请求提交后才会填充。 - Jeremy Stein

-1

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


1
我知道如何查看浏览器发送的请求。我想知道如何查看.NET对HttpWebRequest的处理过程。 - Jeremy Stein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接