Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Прочитать историю перенаправлений при запросе к веб-странице с помощью Python


(TimmonSPB) #1

Здравствуйте!

Нужно получить все url при редиректе.
Нашел human_curl , в описании есть что-то очень похожее:

import human_curl as requests
r = requests.get('http://h.wrttn.me/redirect/4', allow_redirects=True)
r.status_code
200
print(r.history)
['http://h.wrttn.me/redirect/3', 'http://h.wrttn.me/redirect/2',
'http://h.wrttn.me/redirect/1', 'http://h.wrttn.me/redirect/end']

но при попытке установить human_curl (Windows 7, Python2.7) выдает ошибку:
“NameError: global name ‘options’ is not defined


Command python setup.py egg_info failed with error code 1 in c: …. \pycurl2 ”

В программировании новичок, Python осваиваю вместе с Selenium WebDriver.

Буду очень признателен за помощь с установкой human_curl или за альтернативный вариант получения “redirect history”.


(Taras) #2

Что значит все url при редиректе ???

Все реквести которие отправляються при загрузке страници ???


(TimmonSPB) #3

Например: при клике на url1, редиректит на url2, c url2 на url3 и тд... попадаешь на url10. Нужно получить url2 - url9


(Mykhailo Poliarush) #4

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

я вам рекомендую использовать requests библиотеку

pip install requests

установиться у вас без проблем

а дальше можно выполнить плюс минус похожий код

import requests
r = requests.get('http://h.wrttn.me/redirect/4', allow_redirects=True)
for response in r.history:
print response.url 

(TimmonSPB) #5

Спасибо! Практически то, что нужно. Хотя срабатывает не всегда :( Возможно, что обращение воспринимается как бот и редирект не срабатывает?

 

И еще один вопрос, возможно отдельной темой надо было открыть...

Есть такая вещь, как "Safe Browsing" - например FireFox выдает предупреждение, при обращении к подозрительному url. А если к тому же url обратиться средствами WebDriver, то он не блокируется. Как быть?


(Mykhailo Poliarush) #6

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

касательно второго, создавайте новую тему и надо больше деталей, будем разбираться


(TimmonSPB) #7

Спасибо за помощь. Новую тему создам.


(TimmonSPB) #8

А как быть если редирект делается с помощью javascript ?


(Mykhailo Poliarush) #9

Не знаю, тут надо смотреть и что-то пробовать. Я думаю, requests не хендлит такую ситуацию. Скорее всего надо будет искать что-то из мира javascript + python.