由于Robinhood再次更改了API,现在有什么方法可以获取Bearer令牌?

时间:2019-04-29 12:02:07

标签: api oauth-2.0 authorization algorithmic-trading

我们继续通过Robinhood.com玩猫猫游戏。我有一个交易应用程序,该应用程序过去曾与Robinhood进行股票交易,但他们不断更改不受支持的非官方API,使交易者难以使用。我知道很多人都在做同样的事情,我想联系他们,看看是否有新的答案。最新的问题是,当我尝试使用URL https://api.robinhood.com/oauth2/token/获取Bearer令牌时,API返回以下JSON:{“ detail”:“此版本的Robinhood不再受支持。请更新您的应用程序或将Robinhood用于通过Web登录到您的帐户。“}。这开始于4/26/2019。

有没有人找到解决这个问题的办法,还是他们最终击败了我们,使之屈服?

4 个答案:

答案 0 :(得分:1)

就可以了。冒着风险他们看到这篇文章并对其进行更多更改的风险,我们开始:

  1. 首先,您要在网络浏览器中登录RH帐户
  2. 在页面上查看源代码,并查找clientId-它应该是一个大的十六进制数字,用破折号分隔
  3. 将该数字添加到/oauth2/token字段下device_token的POST请求中

可能还有另一种检索设备令牌的方法,我什至不确定它是否唯一,但是这种方法应该可以工作。

答案 1 :(得分:1)

更完整的解决方案(不需要浏览器): 使用requests.session

  1. 通过向“ https://robinhood.com/login”发出GET请求来获取登录页面。 此时,会话的cookie将包含“ device_id”。
  2. 获取此device_id并将其用于向“ https://api.robinhood.com/oauth2/token/”发出oauth2令牌请求,并添加数据请求“ challenge_type”(“ sms”或“ email”)。 该请求将失败,并显示400错误代码。 Robinhood将发送带有临时(5分钟)代码的SMS消息或电子邮件。 同样,在这一点上,使用400响应的主体从JSON对象内部的“挑战”获取“ id”。
  3. 通过向“ https://api.robinhood.com/challenge/CHALLENGEID/respond/”发出POST请求来确认挑战,其中CHALLENGEID与第一个失败的/ oauth2 / token / POST请求中提到的ID相同。
  4. 对“ https://api.robinhood.com/oauth2/token/”进行相同的POST请求,并在标头“ X-ROBINHOOD-CHALLENGE-RESPONSE-ID”中添加值CHALLENGEID。

此后,即使注销,您也可以通过user / pass重用device_id。 请小心存储device_id,因为它是用户/密码登录和成功的SMS /电子邮件2FA的结果。

答案 2 :(得分:0)

很长一段时间后很高兴回到这里。 不知道是否有人还在寻找答案,但是我有一个非常简单的解决方案。

在Robinhood的登录屏幕上,输入您的用户名/电子邮件和密码,按键盘上的F12以调出控制台面板并切换到“网络”选项卡,然后等待页面完全加载。 (在这段时间内,您将看到根据连接速度快速加载的项目列表。)

这时,您可以通过单击下图中突出显示的按钮来继续清除列表。

Click on button highlighted repeatedly until the list is empty

现在,登录您的Robinhood帐户。此时,您的控制台应显示类似于以下所示的列表。

Look for the name "token/", most likely it will be the second one you get all the information you need. And this information will be under the Headers then Request Payload

我能够从过去的知识和网络刮刮的经验中找到乐趣。而且,因为我最近开始通过Robinhood进行交易,所以我也需要知道这一点。

希望这可以帮助您好奇的人。

答案 3 :(得分:0)

对于我的 Robinhood 帐户,我将 Google 身份验证器用于我的 2FA。到目前为止,我将之前发送的原始呼叫发送到 https://api.robinhood.com/oauth2/token/。这是给我的回应:

{"mfa_required":true,"mfa_type":"app"}

然后我重复我的 oauth 令牌请求,但这次提供来自 Google Authenticator 的值(因此我的 GUI 必须提示我填写它),并在 https://api.robinhood.com/oauth2/token/ 的请求中使用此有效负载:

{"grant_type":"password","scope":"internal","client_id":"c82SH0WZOsabOXGP2sxqcj34FxkvfnWRZBKlBjFS","expires_in":86400,"device_token":"***","username":"***","password":"****","mfa_code":"***"}

然后我得到一个访问令牌作为回复