【问题标题】:Inconsistent POSTing between Web Browser and HttpWebRequestWeb 浏览器和 HttpWebRequest 之间的 POST 不一致
【发布时间】:2010-06-19 02:35:55
【问题描述】:

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

当我进入包含名称类似于以下名称的输入元素的页面时出现问题:“RidiculouslyLongInputName.RidiculouslyLongInputName.RidiculouslyLongInputName.@RidiculouslyLong”

在使用 HttpWebRequest 时为此输入元素发布一个值会导致 500 错误,但在通过浏览器发布时可以正常工作。如果我从发布数据中删除此输入值,则 HttpWebRequest 将不会收到 500 错误。但后来我遇到了来自网站的数据验证问题。

知道为什么 HttpWebRequest 失败了吗?

【问题讨论】:

    标签: c# httpwebrequest


    【解决方案1】:

    在这种情况下,数据包嗅探器非常有用,可以准确地查看正在流经的数据类型以及差异是什么。

    http://www.wireshark.org/

    是处理此类事情的绝佳工具。

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

    如果确实是 POST 变量的问题,那么它应该在 HTTP 负载中很明显。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您还可以在 Firefox 中使用 Firebug 扩展。安装并启用此扩展后,在 Firefox 中浏览整个场景。 FIrebug 将告诉您浏览器发送的确切请求/响应。然后,您可以使用 HttpWebRequest 尽可能多地复制它

        【讨论】:

          【解决方案4】:

          首先感谢MEF 的回复。那件事是个人错误,所以我删除了这个问题。

          我认为最适合您的情况的工具是Fiddler,但我想该按钮上附加了其他 JavaScript 或类似的东西,您无法模仿。 WebRequest 不能为您做到这一点,而 WebBrowser 可以做到,因为它正在处理 DOM

          为了正确使用WebRequest,您非常需要通过Fiddler 之类的方式对每个请求进行逆向工程。通过查看页面的源代码(并且引用了 Javascripts/CSS...)很难找到到底发生了什么。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-01-28
            • 2016-01-15
            • 2012-08-04
            • 1970-01-01
            • 1970-01-01
            • 2014-08-17
            • 1970-01-01
            相关资源
            最近更新 更多