Какой Post-запрос отправлять при авторизации https://store.steampowered.com/login/
Я пытаюсь отправить Post-запрос с помощью библиотеки requests на сайт: https://store.steampowered.com/login/ Однако я не могу понять какой словарь сформировать, так же steam, как я понимаю использует много javascript, так что это затрудняет процесс, может кто-нибудь знает какой запрос отправить или возможно нужно использовать другие библиотеки, в моем проекте желательно не использовать selenium, так как мне нужна скорость
Ответы (1 шт):
У вас будет достаточно много сложностей, чтобы провернуть это дело через python и выполнить роль браузера. Я бы сразу рекомендовал искать готовые библиотеки, которые могут авторизовать по логину и паролю. Хотя не факт, что найдете актуальные версии. По запросам, которые проходят, там не простая форма авторизации в плане отправить post запрос на адрес.
Поэтому получится весьма обширный и познавательный, но боюсь крайне бесполезный ответ из-за сложности провернуть это дело на практике. Готовые библиотеки (надо пробовать и проверять) или альтернативные варианты в виде чистого steam api конечно более в приоритете.
Первый момент, там используется Protocol Buffers — протокол сериализации структурированных данных. То есть данные передаются не в чистом виде, а в сериализованном по правилам этого протокола. Второй момент, там несколько запросов к API на авторизацию, она многошаговая.
Открываете devtools браузера на вкладке network, включаете preserve log чтобы они не очищались при редиректах, вводите данные и видите следующую цепочку запросов.
Альтернативно можно их аналог посмотреть тут, возможно они и без protobuf сработают, можно попробовать. Все отправляемые данные там на вкладках указаны:
Нажав на каждый, увидим их заголовки и данные.
- Запрос на получения ключа для шифрования пароля.
Вот эта последняя строка CgUxMTExMQ==, это сериализованное имя аккаунта введенное как 11111. Как работать с protobuf, это отдельно надо смотреть и изучать, слишком обширная тема для ответа. Он требует предварительного описания запроса/ответа и последующей генерации кода. Но сами исходные файлы .proto можно найти: https://github.com/SteamDatabase/Protobufs/blob/master/webui/service_authentication.proto
Но условно для этого запроса нас интересуют данные вида:
message CAuthentication_GetPasswordRSAPublicKey_Request {
optional string account_name = 1;
}
message CAuthentication_GetPasswordRSAPublicKey_Response {
optional string publickey_mod = 1;
optional string publickey_exp = 2;
optional uint64 timestamp = 3;
}
В качестве ключа запроса имя аккаунта, в качестве ответа время, время жизни ключа и ключ для шифрования.
- Следующий запрос на начало авторизации, опять же список сериализованных данных
https://api.steampowered.com/IAuthenticationService/BeginAuthSessionViaCredentials
Данных много, в качестве уходящих данных будет длинная строка вида input_protobuf_encoded: DSdfjnbkUIREWO834kSDJFNKBKJDSLFJHBKDSFB.......KSJDFNGNnnndksjfD==
Дальше я уже опущу подробности, но выполняется еще несколько запросов.
- Проверка, откуда входите, так же там может быть проверка на вход при двухфакторной авторизации. Возможно их можно опустить, но не факт.
https://login.steampowered.com/jwt/checkdevice/32443543984
- Обновления статуса сессии после ввода двухфакторного кода
https://api.steampowered.com/IAuthenticationService/PollAuthSessionStatus
- Получения токенов сессии
https://login.steampowered.com/jwt/finalizelogin
- И наконец будет цепочка запросов на установку токенов на адресах вида
