Задать вопрос
@anoninmer

Python Requests — Как авторизоваться на сайте?

Не получается залогиниться на сайте https://cp.mchost.ru
import requests
from requests.auth import HTTPBasicAuth
requests.post('https://cp.mchost.ru/login.php', auth=HTTPBasicAuth('login', 'pass'))

Вроде бы похоже на обычный basic auth, но не срабатывает, с другими тоже пробывал, что я делаю не так?

Из необычного - форма всплывает окном браузера, я не понимаю как эти формы работают, может быть дело в этом. В общем если кто знает примеры успешного входа в такие формы - прошу помочь.
  • Вопрос задан
  • 951 просмотр
Подписаться 3 Простой Комментировать
Решения вопроса 1
@anoninmer Автор вопроса
Много чего вынужден был прочитать, но ничего не работало как нужно.
В итоге вручную пришлось понять что, как и зачем передает и ждет получить cp.mchost.ru.
На это ушло полдня, но результатом остался доволен. Пользовался инструментарием Google Chrome.

Тут я думаю проблем нет, он не любит запросы не от браузера, юзаю любой первый попавшийся в интернете хедер.
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                         '(KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'}


Дальше открываем сессию, делаем обычный GET запрос по ссылке для логина.
Это нужно для того, чтобы сайт вернул MCHOSTID, который возвращается в виде cookie и что примечательно в строке браузера, но он не обязательный (проверил).
session = requests.Session()
session.get(url, headers=headers)
session.headers.update(headers) # обновим хедеры в сессии


Дальше хитрое. Как оказалось, логин и пароль сайт принимает в виде закодированной строки через BASE64, в которой через двоеточие перечислен логин и пароль.
Auth = base64.b64encode('LOGIN:PASSWORD'.encode('utf-8')).decode('utf-8')


Далее берем MCHOSTID, а также обновляем строку с авторизацией
cookie = session.cookies.get('MCHOSTID', domain='.mchost.ru')
session.headers.update({'Authorization': 'Basic ' + Auth})


Ну и наконец запрос POST, в который мы передаем MCHOSTID в виде строки (именно так ее передает Chrome).
post_request = session.post(url, {'Cookie': 'MCHOSTID=' + cookie})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@MaBa2014
https://gadjimuradov.ru/post/python-requests-avtor...

Сталкивался с такой же проблемой, только при парсинге API, подучите немного литературы по этому поводу, не помешает)
Вам бы в целом с методами POST, GET ознакомиться
Ответ написан
xxxWarlocKxxx
@xxxWarlocKxxx
Для того чтобы получить авторизацию на сервере, нужно отправить правильно собранный POST запрос. Для начала нужно воспользоваться браузером "мозила" (или другим), зайти и авторизоваться на сайте отследив какую структуру имеет запрос, а дальше просто в POST вставляете HEADERS такой же как в браузере и если нужно то в data форму запроса (например типа JSON). И читайте что отвечает сервер обязательно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы