首页 > 解决方案 > 来自 R 中使命召唤 API 的 API 调用 - 身份验证问题

问题描述

我正在尝试从使命召唤 API 中调用玩家列表的统计信息。该 API 需要首先登录网站https://profile.callofduty.com/cod/login。登录后,用户可以使用 call-of-duty API 查看玩家的统计数据。例如,来自 Warzone 的流光savyultras90的统计数据可以通过以下链接查看:https ://my.callofduty.com/api/papi-client/stats/cod/v1/title/mw/platform/psn/gamer /savyultras90/profile/type/wz

如果我从网站登录并尝试查看玩家的统计数据和相关的 json,我可以通过浏览器进行操作。然而,这在 R 中似乎并不简单。

我尝试使用包中的GET功能登录httr如下

respo <- GET('https://profile.callofduty.com/cod/login', authenticate('USER', 'PWD'))

但是当我尝试访问 api 并使用fromJSON包中的函数下载 JSON 文件时jsonlite,如下所示

data <- fromJSON('https://my.callofduty.com/api/papi-client/stats/cod/v1/title/mw/platform/psn/gamer/savyultras90/profile/type/wz')

我收到错误消息“不允许:未通过身份验证”。

如何在一个网站中进行身份验证并保持登录状态以从依赖该身份验证的 API 调用?

标签: rnode.jsapiauthentication

解决方案


看到我最近不得不为 Warzone 开发一个 PHP API,我也许可以指导您如何处理这个问题的正确方向。但首先要注意几点:

  • 如果您想请求该玩家的数据,您需要使用适当的平台单独验证每个用户
  • API 请求数量有限制
  • 《使命召唤》的 API 遵循严格的使用指南,只能由注册合作伙伴使用。使用 API 可能会导致索赔并最终引发诉讼: 链接
  • 没有 API 的公开文档,并且 API 过去发生了变化,破坏了几个 3rd 方工具。

然而,该过程涉及如下所述的几个步骤:

注册拨打电话的设备

https://profile.callofduty.com/cod/mapp/registerDevice

带有格式为的 json 正文,{"deviceId":"INSERT_ID_HERE"} 这将返回带有 authHeader 的响应,我们将在接下来的调用中将其用作 Token

使用动视凭据登录

https://profile.callofduty.com/cod/mapp/login

设置以下标题:

Authorization: "INSERT_AUTHHEADER_HERE"
x_cod_device_id: "INSERT_PREVIOUSLY_USED_DEVICEID_HERE"

这将生成一个数据集,我们将从中保存以下数据:rtkn、ACT_SSO_COOKIE 和 atkn。

对数据进行所需的 API 调用

我们现在拥有进行 API 调用所需的所有数据。

对于每个请求,我们将提交 3 个标头:

  1. 授权:“INSERT_AUTHHEADER_HERE”
  2. x_cod_device_id:“INSERT_PREVIOUSLY_USED_DEVICEID_HERE”
  3. 曲奇饼:ACT_SSO_LOCALE=en_GB;country=GB;API_CSRF_TOKEN=**GENERATE_CSRF_TOKEN**;rtkn=**RTKN_HERE**;ACT_SSO_COOKIE=**ACT_SSO_COOKIE_HERE**;atkn=**ATKN_HERE**

如需更多参考,您可以随时查看成功实现 API的Python 库NodeJS 库。


推荐阅读