it-swarm.com.de

Python Anforderungsbibliothek leitet neue URL um

Ich habe die Python Requests-Dokumentation durchgesehen, aber ich kann keine Funktionalität für das sehen, was ich erreichen möchte.

In meinem Skript setze ich allow_redirects=True.

Ich würde gerne wissen, ob die Seite zu etwas anderem umgeleitet wurde, wie lautet die neue URL.

Zum Beispiel, wenn die Start-URL war: www.google.com/redirect

Und die endgültige URL ist www.google.co.uk/redirected

Wie bekomme ich diese URL?

74
Daniel Pilch

Sie suchen nach Anforderungshistorie .

Das response.history attribute ist eine Liste der Antworten, die zur endgültigen URL geführt haben. Diese finden Sie 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/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

Dies beantwortet eine etwas andere Frage, aber da ich selbst festgefahren bin, hoffe ich, dass es für jemand anderen nützlich sein könnte.

Wenn Sie allow_redirects=False Verwenden und direkt zum ersten Umleitungsobjekt gelangen möchten, anstatt einer Kette von ihnen zu folgen, und nur die Umleitungsposition direkt aus dem 302-Antwortobjekt abrufen möchten, dann r.url wird nicht funktionieren. Stattdessen ist es der "Location" -Header:

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

die Dokumentation enthält dieses Klappentext 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

Ich denke, dass Requests.head anstelle von Requests.get sicherer sein wird Um beim Umleiten von URLs anzurufen, überprüfen Sie das Github-Problem hier :

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

Für python3.5 können Sie den folgenden Code verwenden:

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