Много чего вынужден был прочитать, но ничего не работало как нужно.
В итоге вручную пришлось понять что, как и зачем передает и ждет получить 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})