【问题标题】:HttpWebRequest simulating the request from firebug always failedHttpWebRequest 模拟来自 firebug 的请求总是失败
【发布时间】:2012-06-09 02:37:47
【问题描述】:

我遇到了一个古怪的问题。我正在尝试使用 WebRequest 和 WebClient 自动访问网站。我在 Firebug 中观察到了所有发布请求标头键值对和发布的数据字符串(请求标头和发布选项卡)。然后我用 WebRequest 模拟了这样的请求,并将所有的 header 参数和发布的数据放在那里。但是,当我从这个请求实例执行 GetResponse() 时,我总是得到一个错误页面,上面说缺少一些 sessionID。

实际上,我已经注意将先前(打开登录页面的第一步)响应的会话 cookie 放在请求的 Header 的 cookie 字段中。而且我可以通过模拟请求登录页面(第一页)来获得正确的响应,但无法通过此身份验证页面。我的post数据是userid=John&password=123456789&domain=highmark。而且每次浏览器执行的认证页面请求都成功。

我是否在请求中遗漏了一些 firebug 可能无法显示的内容。如果是,您能否给我一些关于可以检查浏览器发送的整个请求的工具的建议。

【问题讨论】:

    标签: webrequest


    【解决方案1】:

    我已经解决了这个问题。问题是我设置了 httpWebRequest 实例的 AllowAutoRedirect=true。因此,效果是当我从服务器获得第一个响应时,httpWebRequest 会不断发出另一个请求,请求在响应标头的 Location 字段中回复的不同 url。

    HttpWebRequest 类的缺陷是当它被重定向时,它没有在下一个请求头中包含 Set-Cookies(Response's Header Field) 的 cookie,因此服务器会拒绝这样的页面请求,并可能再次重定向到另一个不同的页面。

    并且 httpWebRequest.GetResponse() 方法仅在设置 AllowAutoRedirect=true 时返回最后响应的页面。而且我得到的反应与我预期的完全不同。

    同样在这个解决过程中,我需要感谢一个区分Http Traffic的工具:IEInspector Http Analyzer(http://www.ieinspector.com/httpanalyzer/)。这个工具的一大特点是它不仅可以检查来自浏览器的 http 流量,还可以检查你的进程的 httpWebRequest 做了什么。它还可以以文本格式显示这些请求和响应的原始流。虽然是商业软件,但可以试用15天。我对它告诉我的内容(格式良好的细节)非常满意,我也喜欢购买它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 2014-02-23
      • 2021-10-29
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      相关资源
      最近更新 更多