Не удается получить куки с запросами Python, пока работают почтальон, curl и wget - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь пройти аутентификацию на сайте французского поставщика воды, чтобы получить данные о потреблении воды. Веб-сайт не предоставляет API, и я пытаюсь создать скрипт Python, который проверяет подлинность на сайте и сканирует данные. Моя работа основана на работающем скрипте Domoticz python и скрипте оболочки . Рабочий процесс выглядит следующим образом:

  1. Получить токен с сайта
  2. Авторизуйтесь, используя логин, пароль и токен, получите на шаге 1
  3. Получите 1 или более файлов cookie с шага 2
  4. Получить данные, используя куки-файлы из 3

Я застрял на шаге 2, где я не могу получить куки с моим скриптом Python. Я попытался с почтальоном, curl и wget, и это работает. Я даже использовал код Python, сгенерированный почтальоном, и до сих пор не получаю куки.

Вот скриншот моего почтальона post запрос enter image description here который дает два куки в ответе.

А вот мой код Python:

import requests

url = "https://www.toutsurmoneau.fr/mon-compte-en-ligne/je-me-connecte"

querystring = {"_username":"mymail@gmail.com","_password":"mypass","_csrf_token":"knfOIFZNhiCVxHS0U84GW5CrfMt36eLvqPPYGDSsOww","signin[username]":"mymail@gmail.com","signin[password]":"mypass","tsme_user_login[_username]":"mymail@gmail.com","tsme_user_login[_password]":"mypass"}

payload = ""
headers = {
    'Accept': "application/json, text/javascript, */*; q=0.01",
    'Content-Type': "application/x-www-form-urlencoded",
    'Accept-Language': "fr,fr-FR;q=0.8,en;q=0.6",
    'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Mobile Safari/537.36",
    'Connection': "keep-alive",
    'cache-control': "no-cache",
    'Postman-Token': "c7e5f7ca-abea-4161-999a-3c28ec979628"
    }

response = requests.request("POST", url, data=payload, headers=headers, params=querystring)

print(response.cookies.get_dict())

Вывод {}.

Я не могу понять, что я делаю неправильно. Если вам нужна помощь, я с удовольствием ее получу.

Спасибо за чтение.

Edit:

Некоторые из моих предположений были неверными. Сценарий оболочки действительно работал, но не Почтальон. Я был смущен из-за ответа 200 я получаю.

1 Ответ

0 голосов
/ 23 апреля 2019

Поэтому я отвечаю на свой вопрос.

Во-первых, при получении токена на шаге 1 я получаю печенье.Я должен использовать этот файл cookie при входе, чего раньше не делал.

Затем, при использовании этого файла cookie и токена для входа на шаге 2, я не смог увидеть ни одного файла cookie в ответе, который я получаю, когда у меня было хорошее соединение (в содержимом я нахожу строку «отключить»)который здесь только если хорошо залогинен).Это нормальное поведение, поскольку куки не отправляются в ответ на запрос публикации.

Мне пришлось создать requests.session, чтобы опубликовать форму входа в систему, и сеанс хранит куки.

Теперь я могу использовать эту информацию для получения данных с сервера.Надеюсь, что это поможет другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...