Есть ли способ получить токен Bearer сейчас, так как Robinhood снова изменил API? - PullRequest
2 голосов
/ 29 апреля 2019

Мы продолжаем играть в эту игру в кошки-мышки с Robinhood.com.У меня есть торговое приложение, которое раньше торговало акциями с Robinhood, но они постоянно меняют неофициальный API без поддержки, чтобы трейдерам было трудно его использовать.Я знаю, что многие люди делают то же самое, и я хочу обратиться к ним, чтобы узнать, есть ли новый ответ.Последняя проблема возникает, когда я пытаюсь получить токен Bearer, используя URL https://api.robinhood.com/oauth2/token/, API возвращает следующий код JSON: {"detail": "Эта версия Robinhood больше не поддерживается. Пожалуйста, обновите ваше приложение или используйте Robinhoodдля входа в Интернет через вашу учетную запись. "}.Это начало происходить 4/26/2019.

Кто-нибудь еще нашел способ обойти это, или они наконец-то избили нас до покорности?

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Более полное решение (не нужен браузер): Используйте requests.session.

  1. Получите страницу входа, отправив запрос GET на "https://robinhood.com/login". На данный момент куки сессии будут содержать 'device_id'.
  2. Получите этот device_id и используйте его при отправке запроса токена oauth2 на «https://api.robinhood.com/oauth2/token/"», а также добавьте в запрос данных «challenge_type» («sms» или «email»). Этот запрос не будет выполнен с кодом ошибки 400. Robinhood отправит SMS-сообщение или электронное письмо с временным (5-минутным) кодом. Также на этом этапе используйте тело ответа 400, чтобы получить «id» из «challenge» внутри объекта JSON.
  3. Подтвердите вызов, отправив запрос POST на "https://api.robinhood.com/challenge/CHALLENGEID/respond/", где CHALLENGEID - это тот же идентификатор, который указан в первом неудачном запросе / oauth2 / token / POST.
  4. Сделайте тот же POST-запрос для "https://api.robinhood.com/oauth2/token/" и включите в заголовок" X-ROBINHOOD-CHALLENGE-RESPONSE-ID "значение CHALLENGEID.

После этого вы можете повторно использовать device_id с user / pass даже после выхода из системы. Будьте осторожны с хранением device_id, так как это результат входа пользователя / пароля и успешного SMS / сообщения электронной почты 2FA.

1 голос
/ 01 мая 2019

Просто получилось.Риск того, что они увидят этот пост и изменят его больше, здесь мы идем:

  1. Сначала вы захотите войти в свою учетную запись RH в веб-браузере
  2. Просмотрите источник на странице и найдите clientId - это должно быть большое шестнадцатеричное число, разделенное черточками
  3. Добавьте это число к своим запросам POST в /oauth2/token в поле device_token

Возможно, есть другой способ получить токен устройства, и я даже не уверен, что он уникален, но этот способ должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...