Я пытаюсь пройти аутентификацию на сайте французского поставщика воды, чтобы получить данные о потреблении воды. Веб-сайт не предоставляет API, и я пытаюсь создать скрипт Python, который проверяет подлинность на сайте и сканирует данные. Моя работа основана на работающем скрипте Domoticz python и скрипте оболочки .
Рабочий процесс выглядит следующим образом:
- Получить токен с сайта
- Авторизуйтесь, используя логин, пароль и токен, получите на шаге 1
- Получите 1 или более файлов cookie с шага 2
- Получить данные, используя куки-файлы из 3
Я застрял на шаге 2, где я не могу получить куки с моим скриптом Python. Я попытался с почтальоном, curl и wget, и это работает. Я даже использовал код Python, сгенерированный почтальоном, и до сих пор не получаю куки.
Вот скриншот моего почтальона post
запрос
который дает два куки в ответе.
А вот мой код 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 я получаю.