Задать вопрос
Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (4)

Лучшие ответы пользователя

Все ответы (3)
  • Python Requests - Как авторизоваться на сайте?

    @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})
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (6)