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?
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
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
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
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)
Pour python3.5, vous pouvez utiliser le code suivant:
import urllib.request
res = urllib.request.urlopen(starturl)
finalurl = res.geturl()
print(finalurl)