Не могу авторизоваться на сайте, requests
Выполняю заказ, и нужно через скрипт авторизоваться на сайте (только requests, без Selenium!) но каким бы я образом не пытался - не удается авторизоваться. В ответе приходит
{'Message': 'Помилка авторизації: Логін або пароль зазначений невірно', 'Status': 'Error', 'ErrorCode': 2}, хотя пароль верный, и через сайт удается авторизоваться,
либо иногда получаю:
Сессия была закрыта или неактивна.
Если открыть Network в браузере, и посмотреть на данные, которые отправляются POST запросом, то можно увидеть, что там почему-то передается не пароль, а значение из 32 символов, как я понимаю это session_id, но если и его передавать, то тоже не авторизуется.
Когда нужно передать реальный пароль для POST-запроса? В инспекторе нигде нет и слова о передаче моего реального пароля (он состоит только из 6 или 8 цифр).

Как я понимаю - нужно сделать 1 POST-запрос, чтобы получить sesion_id, а потом второй - чтобы авторизоваться. Вот такие данные нужно передать для того, чтобы получить session_id, как я понимаю:
Код:
import requests
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
session = requests.Session()
session.headers.update({'User-Agent': user_agent})
url = "https://mygreenway.co.ua/s/l/"
session.headers.update({'Referer': url})
auth = {
"type": "auth",
"action": "sessionkey"
}
ses = session.post(url, data=auth)
key = ses.json()['Key']
print(key)
data = {
"type": "auth",
"action": "login",
"REMEMBER": "0",
"NAME": "1234567",
"PASSWORD": key
}
ses2 = session.post('https://mygreenway.co.ua/s/l/', data=data)
print(ses2.text)
with open("result.html", "w", encoding="utf-8") as f:
f.write(ses2.text)
session.close()
UPD. Копнул чуть глубже, посмотрел как реализован запрос через JavaScript. Там передается пароль с учетом MD5-хэша, но даже если и создавать подобный хэш - все равно не удается авторизоваться. Возможно я неправильно собираю этот хэш. Буду пробовать
req = {method:'post', dataType:'json', data:{type:'auth', action:'login', REMEMBER:($('#remembermeModal').prop('checked')==true?1:0), NAME:$('#nameModal').val(), PASSWORD:(MD5(key+MD5($('#passwordModal').val())))}};
Ответы (1 шт):
Проблему решил следующим образом:
Заглянул в JavaScript код на сайте
req = {method:'post', dataType:'json', data:{type:'auth', action:'login', REMEMBER:($('#remembermeModal').prop('checked')==true?1:0), NAME:$('#nameModal').val(), PASSWORD:(MD5(key+MD5($('#passwordModal').val())))}};
и увидел, что пароль для POST-запроса нужно отправлять в формате:
MD5('session_id' + MD5('your_passwd'))
Итоговый код ниже:
from hashlib import md5
import requests
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36'
session = requests.Session()
session.headers.update({'User-Agent': user_agent})
url = "https://mygreenway.co.ua/s/l/"
session.headers.update({'Referer': url})
ses = session.post(url, data={"type": "auth", "action": "sessionkey"})
key = ses.json()['Key']
passwd = "your password"
my_key = key + md5(passwd.encode('utf-8')).hexdigest()
my_md5_key = md5(my_key.encode('utf-8')).hexdigest()
data = {
"type": "auth",
"action": "login",
"REMEMBER": 0,
"NAME": "12345678",
"PASSWORD": my_md5_key
}
# авторизация
session.post("https://mygreenway.co.ua/s/l/", data=data)
# и дальше операции с сайтом
session.close()
