0

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

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

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

4

1 回答 1

0

我已经解决了这个问题。问题是我设置了 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天。我对它告诉我的内容(格式良好的细节)非常满意,我也喜欢购买它。

于 2012-06-05T17:49:34.957 回答