Web浏览器和HttpWebRequest之间的POST不一致

时间:2010-06-19 02:35:55

标签: c# httpwebrequest

我正在使用C#HttpWebRequest / HttpWebResponse进行Web Scraping。在大多数情况下,这个过程进展顺利。但是在通过多个页面进行POST后,我已经陷入了使用Web浏览器和HttpWebRequest / HttpWebResponse调用进行测试之间似乎不一致的问题。

当我登陆包含名称与此类似名称的输入元素的页面时出现问题:“RidiculouslyLongInputName.RidiculouslyLongInputName.RidiculouslyLongInputName。@ RidiculouslyLong”

在使用HttpWebRequest时,为此输入元素发布值会导致500错误,但在通过浏览器进行POST时工作正常。如果我从post数据中删除此输入值,HttpWebRequest将不会得到500错误。但后来我在网站上遇到了数据验证问题。

关于为什么HttpWebRequest失败的任何想法?

4 个答案:

答案 0 :(得分:1)

有些时候,数据包嗅探器非常有用,可以准确地查看流经的数据类型以及它们之间的区别。

http://www.wireshark.org/

这是一个很好的工具。

过滤到您感兴趣的域名,然后使用HttpWebRequest发送数据包。将数据包数据保存在某处。重复但通过浏览器执行请求。检查区别。

如果它确实是POST变量的问题,那么它应该在HTTP有效载荷中显而易见。

答案 1 :(得分:0)

不确定您遇到此问题的原因,但我建议您抓取Fiddler的副本并查看浏览器在POST请求中发送的内容。可能会有一些不太明显的事情发生。

答案 2 :(得分:0)

您还可以在Firefox中使用Firebug扩展程序。安装并启用此扩展后,请浏览Firefox中的整个方案。 FIrebug将告诉您浏览器发送的确切请求/响应。然后,您可以使用HttpWebRequest

尽可能多地复制它

答案 3 :(得分:0)

首先感谢MEF回复。那个案子是个人错误所以我删除了这个问题。

我觉得你的案例最好的工具是Fiddler,但我想还有其他JavaScript附加到那个按钮或类似你想要模仿的东西。 WebRequest无法为您执行此操作,WebBrowser可以执行此操作,因为它正在处理DOM

为了正确使用WebRequest,您非常需要通过Fiddler等内容对每个请求进行反向工程。通过查看页面的源代码(并且它引用了Javascripts / CSS ...)很难找到正在发生的事情。