web-dev-qa-db-fra.com

Python Demande à la bibliothèque de rediriger une nouvelle URL

J'ai parcouru la documentation Python Requests, mais je ne vois aucune fonctionnalité correspondant à ce que j'essaie de réaliser.

Dans mon script, je règle allow_redirects=True.

Je voudrais savoir si la page a été redirigée vers quelque chose d'autre, quelle est la nouvelle URL.

Par exemple, si l'URL de départ était: www.google.com/redirect

Et l'URL finale est www.google.co.uk/redirected

Comment puis-je obtenir cette URL?

74
Daniel Pilch

Vous recherchez le historique de la demande .

L'attribut response.history est une liste de réponses ayant conduit à l'URL finale, que vous pouvez trouver dans 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"

Démo:

>>> 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
121
Martijn Pieters

Cela répond à une question légèrement différente, mais comme je me suis retrouvé coincé moi-même, j'espère que cela pourra être utile à quelqu'un d'autre.

Si vous voulez utiliser allow_redirects=False et accéder directement au premier objet de redirection, plutôt que d'en suivre une chaîne, et que vous voulez simplement obtenir l'emplacement de redirection directement à partir de l'objet de réponse 302, alors r.url ne fonctionnera pas. Au lieu de cela, c'est l'en-tête "Location":

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
44
hwjp

la documentation a ce texte de présentation 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 
24
Back2Basics

Je pense que requests.head au lieu de requests.get sera plus sûr pour appeler lors du traitement de la redirection d’URL, vérifiez le problème github ici :

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

Pour python3.5, vous pouvez utiliser le code suivant:

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