Python Requests模块最终会出现奇怪的重定向

时间:2012-01-31 12:43:42

标签: python http-status-code-301 http-request python-requests

使用python模块发出GET请求请求以奇怪的URL结尾:

>>> import requests
>>> r = requests.get("http://t.co/Uspy071j")
>>> print r.url
"http://feeds.feedburner.com/%257Er/LesArdoises/%257E3/bD2JuJagz5I/roxino-cest-tout-vert.html?utm_source=twitterfeed&utm_medium=twitter"

此网址以错误400结尾。但是对于相同的网址使用RestKit,final_url会返回正确的值:

>>> import restkit
>>> r = restkit.request("http://t.co/Uspy071j", follow_redirect=True)
>>> print r.final_url
"http://lesardoises.com/6277/roxino-cest-tout-vert.html?utm_medium=twitter&utm_source=twitterfeed"

请求有什么问题?

2 个答案:

答案 0 :(得分:2)

如果您从https://github.com/kennethreitz/requests.git而不是最新的标记版本安装当前主分支,它将正常工作。

请求错误地引用了上一个网址中的波浪号。它没有请求http://feedproxy.google.com/~r/LesArdoises/~3/bD2JuJagz5I/roxino-cest-tout-vert.html?utm_source=twitterfeed&utm_medium=twitter,而是请求http://feeds.feedburner.com/%257Er/LesArdoises/%257E3/bD2JuJagz5I/roxino-cest-tout-vert.html?utm_source=twitterfeed&utm_medium=twitter

我可以使用最新的Requests版本(0.10.1)重现这一点,但它似乎在未发布的master(和develop)分支中得到修复。

修复此错误的提交是https://github.com/kennethreitz/requests/commit/cb64d311719e627df0f78c8446d40326899206c3

答案 1 :(得分:0)

在这里工作:

In [6]: import requests

In [7]: r = requests.get("http://t.co/Uspy071j")

In [8]: r
Out[8]: <Response [200]>

In [9]: print r.url
http://lesardoises.com/6277/roxino-cest-tout-vert.html?utm_medium=twitter&utm_source=twitterfeed