Przeglądałem dokumentację Python Requests, ale nie widzę żadnej funkcjonalności dla tego, co próbuję osiągnąć.
W moim skrypcie ustawiam allow_redirects=True
.
Chciałbym wiedzieć, czy strona została przekierowana na coś innego, jaki jest nowy adres URL.
Na przykład, jeśli początkowy adres URL to: www.google.com/redirect
A końcowy URL to www.google.co.uk/redirected
Jak uzyskać ten adres URL?
python
http
redirect
python-requests
Daniel Pilch
źródło
źródło
urllib2
Odpowiedzi:
Szukasz historii żądań .
response.history
Atrybut jest lista odpowiedzi, które doprowadziły do ostatecznej zawartości, którą można znaleźć wresponse.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")
Próbny:
>>> 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
źródło
To odpowiedź na nieco inne pytanie, ale skoro sam utknąłem w tym, mam nadzieję, że może to być przydatne dla kogoś innego.
Jeśli chcesz użyć
allow_redirects=False
i dostać się bezpośrednio do pierwszego obiektu przekierowania, zamiast podążać za ich łańcuchem, i po prostu chcesz uzyskać lokalizację przekierowania bezpośrednio z obiektu odpowiedzi 302, tor.url
nie zadziała. Zamiast tego jest to nagłówek „Lokalizacja”: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
źródło
r.next
? Myślałem, że będzie toPreparedRequest
wskazanie na adres URL przekierowania, ale wydaje się, że tak nie jest ...dokumentacja ma tę notkę https://requests.readthedocs.io/en/master/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
źródło
Myślę, że request.head zamiast request.get będzie bezpieczniejsze do wywołania podczas obsługi przekierowania adresu URL, sprawdź tutaj problem z github :
r = requests.head(url, allow_redirects=True) print(r.url)
źródło
W przypadku pythona 3.5 możesz użyć następującego kodu:
import urllib.request res = urllib.request.urlopen(starturl) finalurl = res.geturl() print(finalurl)
źródło