Я просматривал документацию по запросам Python, но не вижу никаких функциональных возможностей того, чего я пытаюсь достичь.
В моем сценарии я устанавливаю allow_redirects=True
.
Я хотел бы знать, была ли страница перенаправлена на что-то еще, каков новый URL.
Например, если начальный URL был: www.google.com/redirect
И конечный URL-адрес www.google.co.uk/redirected
Как мне получить этот URL?
python
http
redirect
python-requests
Даниэль Пильч
источник
источник
urllib2
Ответы:
Вы ищете историю запросов .
response.history
Атрибут представляет собой список ответов , которые привели к окончательному URL, который можно найти в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")
Демо:
>>> 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
источник
Это ответ на несколько другой вопрос, но поскольку я сам застрял на этом, я надеюсь, что это может быть полезно для кого-то другого.
Если вы хотите использовать
allow_redirects=False
и перейти непосредственно к первому объекту перенаправления, а не следовать их цепочке, и вы просто хотите получить место перенаправления непосредственно из объекта ответа 302, тогдаr.url
это не сработает. Вместо этого это заголовок «Местоположение»: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.next
? Я думал, что это будет содержатьPreparedRequest
указание на URL-адрес перенаправления, но, похоже, это не так ...в документации есть это рекламное объявление 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
источник
Я думаю, что при обработке перенаправления URL-адреса будет безопаснее вызывать request.head вместо requests.get , проверьте здесь проблему github :
r = requests.head(url, allow_redirects=True) print(r.url)
источник
Для python3.5 вы можете использовать следующий код:
import urllib.request res = urllib.request.urlopen(starturl) finalurl = res.geturl() print(finalurl)
источник