我正在使用 urllib2 使用 Python 2.7.3 执行 http 发布请求。我的请求返回 HTTPError 异常(HTTP 错误 502:代理错误)。
查看与 Charles 的消息流量,我看到正在发生以下情况:
- 我使用 urllib2 发送 HTTP 请求(POST /index.asp?action=login HTTP/1.1)
- 远程服务器回复状态 303 和 ../index.asp?action=news 的位置标头
- urllib2 重试发送 get 请求:(GET /../index.asp?action=news HTTP/1.1)
- 远程服务器回复状态为 502(代理错误)
502 回复在响应正文中包含以下内容:“DNS 查找失败:10.0.0.30:80index.asp”(注意格式错误的 URL)
所以我认为这意味着远程服务器网络上的代理服务器在请求中看到“/../index.asp” URL 并误解它,从而使用错误的 URL 发送我的请求。
当我使用浏览器 (Chrome) 发出相同的请求时,重试将发送到 GET /index.asp?action=news。因此,Chrome 从 URL 中去掉了前导的“/..”,远程服务器回复了一个有效的响应。
这是一个 urllib2 错误吗?有什么办法可以让重试忽略 URL 中的“/..”吗?或者有没有其他方法可以解决这个问题?认为这可能是一个 urllib2 错误,我用请求替换了 urllib2,但请求产生了相同的结果。当然,这可能是因为 requests 是建立在 urllib2 之上的。
谢谢你的帮助。