Python: запросы

Мое намерение – войти в сайт, а затем получить доступ к защищенному изображению из сценария python. У меня есть как юридический, так и рабочий доступ из браузера.

Это то, что у меня есть сейчас.

import requests s = requests.Session() s.get('*domain*') r_login =s.post('*domain*/user.php', headers={'cmd': 'login', 'loginname': '***', 'password': '***' }) print (s.cookies) print (r_login.status_code) r_img = s.get('*domain*/*protectedimage*.jpg') print (r_img.status_code) print (r.cookies) print (s.cookies['PHPSESSID']) 

Вывод:

 <<class 'requests.cookies.RequestsCookieJar'>[<Cookie PHPSESSID=664b0842085b847a04d415a22e013ad8 for *domain*/>]> 200 403 <<class 'requests.cookies.RequestsCookieJar'>[]> 664b0842085b847a04d415a22e013ad8 

Я уверен, что могу успешно войти в систему, потому что после этого я загрузил html-файл, и это было в форме входа в систему. Но моя проблема в том, что мне кажется, что мой cookie PHPSESSID не проходит, поэтому я получите ошибку 403 . Но я ясно это имею в моей сессии. Я также попытался добавить файл cookie вручную в "r_img" , и это не имело значения, я все равно получаю пустой CookieJar и ошибку 403 . Не будет ли это возможным только с модулями запросов? Я что-то пропустил? Извините, что я недостаточно знаком с HTTP запросами.

Я использую Python 3.4 только ради ясности.

2 Solutions collect form web for “Python: запросы”

Вы передаете данные своей формы в виде заголовков HTTP . Форма входа POST должна отправлять элементы формы в качестве параметра data :

 r_login = s.post('*domain*/user.php', data={'cmd': 'login', 'loginname': '***', 'password': '***' }) 

Проверяйте возвращенное тело , а не только код состояния. Ваш запрос POST был принят сервером ( 200 OK ), но поскольку информация для входа не была отправлена, тело , скорее всего, скажет вам что-то вроде «неверный вход, повторите попытку».

Сервер, скорее всего, очистил cookie снова, увидев, что это был не действительный сеанс регистрации, когда вы попросили изображение. Ответ 403, вероятно, содержит заголовок Set-Cookie для PHPSESSID с датой в прошлом, чтобы очистить его.

Попробуйте сделать это следующим образом:

В соответствии с документами python-запросов :

 payload = {'cmd': 'login', 'loginname': '***', 'password': '***'} url = '*domain*/user.php' s.post(url, data=payload) 
  • Как я могу очистить первую ссылку поиска Google с красивым супом
  • Как использовать запросы Python для подделки посещения браузера?
  • Python requests.exceptions.ConnectionError: HTTPSConnectionPool: Максимальное количество попыток превышено с URL: Connection отказано)
  • Пакет Python в автономном режиме
  • При анализе данных json я получаю: TypeError: индексы списка должны быть целыми или срезами, а не str
  • Передача csrftoken с запросами python
  • Как получить перенаправленный JS-файл, связанный с веб-страницей
  • Загрузка * .gz файла с zip-файлом с запросами python испортила его
  •  
    Interesting Posts for Van-Lav

    ValueError: элемент последовательности обновления словаря # 0 имеет длину 1; 2 требуется

    Python: записывать и считывать блоки двоичных данных в файл

    переменная python os.environ не проходит в сценарии bash

    Как объединить последовательные данные в фрейме данных и добавить значение

    Создание формы с использованием Generic_inlineformset_factory из формы модели

    urllib2 – отправить запрос

    Создание строки с помощью python с использованием циклов с проблемами логических условий против альтернативной функции соединения?

    Класс Python Enum (с tostring fromstring)

    Как распечатать лучшие параметры модели в конвейере pyspark

    Значения Unicode в строках экранируются при сбрасывании на JSON в Python

    Загрузка * .gz файла с zip-файлом с запросами python испортила его

    AttributeError: объект 'module' не имеет атрибута 'Spider'

    import matplotlib._png не работает

    Графы Logscale с нулевыми значениями в matplotlib

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

    Python - лучший язык программирования в мире.