Python请求库redirect新的URL

我一直在查看Python请求文档,但是我看不到任何我想要实现的function。

在我的脚本中,我设置了allow_redirects=True

我想知道,如果该网页已被redirect到别的什么新的URL。

例如,如果起始url是: www.google.com/redirect

最终的url是www.google.co.uk/redirected

我如何获得该url?

您正在查找请求历史logging 。

response.history属性是导致最终URL的响应列表,可以在response.urlfind。

 response = requests.get(someurl) if response.history: print "Request was redirected" for resp in response.history: print resp.status_code, resp.url print "Final destination:" print response.status_code, response.url else: print "Request was not redirected" 

演示:

 >>> import requests >>> response = requests.get('http://httpbin.org/redirect/3') >>> response.history (<Response [302]>, <Response [302]>, <Response [302]>) >>> for resp in response.history: ... print resp.status_code, resp.url ... 302 http://httpbin.org/redirect/3 302 http://httpbin.org/redirect/2 302 http://httpbin.org/redirect/1 >>> print response.status_code, response.url 200 http://httpbin.org/get 

这是回答一个稍微不同的问题,但是由于我自己被困住了,我希望这可能对其他人有用。

如果你想使用allow_redirects=False并直接获取第一个redirect对象,而不是跟随它们的链,而你只想直接从302响应对象中获取redirect位置,那么r.url将不起作用。 相反,它是“位置”标题:

 r = requests.get('http://github.com/', allow_redirects=False) r.status_code # 302 r.url # http://github.com, not https. r.headers['Location'] # https://github.com/ -- the redirect destination 

文档有这个bld http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history

 r = requests.get('http://www.github.com') r.url #returns https://www.github.com instead of the http page you asked for 

我认为requests.head而不是requests.get在处理urlredirect时会更安全,请在这里检查github的问题:

 r = requests.head(url, allow_redirects=True) print(r.url) 

对于python3.5,你可以使用下面的代码:

 import urllib.request res = urllib.request.urlopen(starturl) finalurl = res.geturl() print(finalurl)