Python 2.7 urllib2 在使用 xml 内容点击重定向时引发 urllib2.HTTPError 301
Posted
技术标签:
【中文标题】Python 2.7 urllib2 在使用 xml 内容点击重定向时引发 urllib2.HTTPError 301【英文标题】:Python 2.7 urllib2 raising urllib2.HTTPError 301 when hitting redirect with xml content 【发布时间】:2017-12-29 09:44:13 【问题描述】:我正在使用 urllib2 在hxxp://s3.amazonaws.com/mybucket
请求特定的 S3 存储桶。亚马逊发回一个 301 的 HTTP 代码以及一些 XML 数据(重定向到 hxxp://mybucket.s3.amazonaws.com/
)。 python 没有遵循重定向,而是引发urllib2.HTTPError: HTTP Error 301: Moved Permanently
。
根据HOWTO Fetch Internet Resources Using urllib2 的官方 Python 文档,“默认处理程序处理重定向(300 范围内的代码)”。
是 python 处理不正确(可能是因为响应中出现了意外的 XML),还是我做错了什么?我在 Wireshark 中看过,对 python 的请求的响应与使用 Web 客户端对我的响应完全相同。在调试中,我没有看到响应对象中的任何地方都捕获了 XML。
感谢您的指导。
编辑:很抱歉最初没有发布代码。没什么特别的,字面意思就是这样 -
import urllib2, httplib
request = urllib2.Request(site)
response = urllib2.urlopen(request)
【问题讨论】:
代码在哪里?请提供minimal reproducible example。 抱歉,现在添加。我没有使用任何特殊的处理程序或做很多事情。 @KayBalearica 你可以考虑切换到requests
模块。
@cᴏʟᴅsᴘᴇᴇᴅ 感谢您的建议。它为我正确处理。 urllib2 行为对您来说是不是一个错误?
@COLDSPEED 哈哈,够公平的!
【参考方案1】:
您最好使用requests
库。 requests
默认处理重定向:http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history
import requests
response = requests.get(site)
print(response.content)
我没有得到 urllib2 的问题,我尝试查看文档 https://docs.python.org/2/library/urllib2.html,但它看起来并不直观。
似乎在 Python3 中,他们对其进行了重构以减轻使用负担,但我仍然坚信 requests
是要走的路。
注意 urllib2 模块已拆分为多个模块 Python 3 命名为 urllib.request 和 urllib.error。 2to3 工具将 将源代码转换为 Python 3 时自动调整导入。
【讨论】:
谢谢。看起来这就是我最终会做的事情。不过,我仍然很想知道这是否是预期的 urllib2 行为。以上是关于Python 2.7 urllib2 在使用 xml 内容点击重定向时引发 urllib2.HTTPError 301的主要内容,如果未能解决你的问题,请参考以下文章
python urllib2.urlopen(url).read()乱码