Подтвердить что ты не робот

Библиотека запросов Python перенаправляет новый URL-адрес

Я просматривал документацию Python Requests, но я не вижу никакой возможности для того, чего я пытаюсь достичь.

В моем script я устанавливаю allow_redirects=True.

Я хотел бы знать, была ли перенаправлена ​​страница на что-то еще, что такое новый URL.

Например, если начальный URL был: www.google.com/redirect

И последний URL-адрес www.google.co.uk/redirected

Как мне получить этот URL?

4b9b3361

Ответ 1

Вы ищете историю запросов.

Атрибут 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

Ответ 2

Это ответ на несколько другой вопрос, но поскольку я сам застрял в этом, я надеюсь, что это может быть полезно для кого-то другого.

Если вы хотите использовать 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

Ответ 4

Я думаю, что request.head вместо request.get будет более безопасно звонить при обработке перенаправления URL-адресов, проверьте проблему github здесь:

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

Ответ 5

Для python3.5 вы можете использовать следующий код:

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