我正在使用C#HttpWebRequest / HttpWebResponse进行Web Scraping。在大多数情况下,这个过程进展顺利。但是在通过多个页面进行POST后,我已经陷入了使用Web浏览器和HttpWebRequest / HttpWebResponse调用进行测试之间似乎不一致的问题。
当我登陆包含名称与此类似名称的输入元素的页面时出现问题:“RidiculouslyLongInputName.RidiculouslyLongInputName.RidiculouslyLongInputName。@ RidiculouslyLong”
在使用HttpWebRequest时,为此输入元素发布值会导致500错误,但在通过浏览器进行POST时工作正常。如果我从post数据中删除此输入值,HttpWebRequest将不会得到500错误。但后来我在网站上遇到了数据验证问题。
关于为什么HttpWebRequest失败的任何想法?
答案 0 :(得分:1)
有些时候,数据包嗅探器非常有用,可以准确地查看流经的数据类型以及它们之间的区别。
这是一个很好的工具。
过滤到您感兴趣的域名,然后使用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 ...)很难找到正在发生的事情。