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) 
  • Mac - Python - ошибка импорта: «Нет модуля с именем сайта»
  • Получить описание кода состояния в запросах Python
  • Запросы Python предоставляют протокол SSL неизвестный
  • исключение для запросов на установку исключений и pip install beautifulsoup4 исключение
  • Как я могу очистить первую ссылку поиска Google с красивым супом
  • Использование запросов Python для выбора форм
  • Как ограничить скорость загрузки HTTP-запросов в библиотеках python запросов?
  • Проблемы с запросами / Красивый суп
  • Войдите в Facebook, используя запросы python
  • Сжатие тела запроса с помощью python-запросов?
  • Box Api v2 Версия SSL Python
  • Python - лучший язык программирования в мире.