La biblioteca de solicitudes Python redirige la nueva url

He estado buscando en la documentación de Python Requests, pero no puedo ver ninguna funcionalidad de lo que estoy tratando de lograr.

En mi script estoy configurando allow_redirects=True .

Me gustaría saber si la página ha sido redirigida a otra cosa, cuál es la nueva URL.

Por ejemplo, si la URL de inicio era: www.google.com/redirect

Y la URL final es www.google.co.uk/redirected

¿Cómo consigo esa URL?

Usted está buscando el historial de solicitudes .

El atributo response.history es una lista de respuestas que condujeron a la URL final, que se puede encontrar en 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" 

Manifestación:

 >>> import requests >>> response = requests.get('http://httpbin.org/redirect/3') >>> response.history (, , ) >>> 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 

Esta es una respuesta a una pregunta ligeramente diferente, pero como me quedé atascado en esto, espero que pueda ser útil para otra persona.

Si desea utilizar allow_redirects=False y acceder directamente al primer objeto de redireccionamiento, en lugar de seguir una cadena de ellos, y solo desea obtener la ubicación de redireccionamiento directamente del objeto de respuesta 302, r.url no funcionará . En su lugar, es el encabezado “Ubicación”:

 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 

la documentación tiene esta nota publicitaria http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history

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

Creo que requests.head en lugar de requests.get será más seguro llamar cuando maneje el redireccionamiento de URL, verifique el problema de github aquí :

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

Para python3.5, puedes usar el siguiente código:

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