Python Requests library redirect new url
You are looking for the request history.
The response.history
attribute is a list of responses that led to the final URL, which can be found in response.url
.
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")
Demo:
>>> 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/3302 http://httpbin.org/redirect/2302 http://httpbin.org/redirect/1>>> print(response.status_code, response.url)200 http://httpbin.org/get
This is answering a slightly different question, but since I got stuck on this myself, I hope it might be useful for someone else.
If you want to use allow_redirects=False
and get directly to the first redirect object, rather than following a chain of them, and you just want to get the redirect location directly out of the 302 response object, then r.url
won't work. Instead, it's the "Location" header:
r = requests.get('http://github.com/', allow_redirects=False)r.status_code # 302r.url # http://github.com, not https.r.headers['Location'] # https://github.com/ -- the redirect destination
the documentation has this blurb https://requests.readthedocs.io/en/master/user/quickstart/#redirection-and-history
import requestsr = requests.get('http://www.github.com')r.url#returns https://www.github.com instead of the http page you asked for