R-身份验证问题中来自职责调用API的API调用
我正在尝试调用任务调用API中球员列表的统计信息。此API首先需要登录网站。登录后,用户可以使用职责调用API查看玩家的统计信息。例如,可以通过以下链接查看战区拖缆90的统计信息: 如果我从该网站登录并尝试查看玩家的统计数据和相关的json,我可以通过浏览器进行操作。然而,在R中这似乎并不简单 我尝试使用R-身份验证问题中来自职责调用API的API调用,r,node.js,api,authentication,R,Node.js,Api,Authentication,我正在尝试调用任务调用API中球员列表的统计信息。此API首先需要登录网站。登录后,用户可以使用职责调用API查看玩家的统计信息。例如,可以通过以下链接查看战区拖缆90的统计信息: 如果我从该网站登录并尝试查看玩家的统计数据和相关的json,我可以通过浏览器进行操作。然而,在R中这似乎并不简单 我尝试使用httr包中的GET功能登录,如下所示 respo <- GET('https://profile.callofduty.com/cod/login', authenticate('USE
httr
包中的GET
功能登录,如下所示
respo <- GET('https://profile.callofduty.com/cod/login', authenticate('USER', 'PWD'))
data <- fromJSON('https://my.callofduty.com/api/papi-client/stats/cod/v1/title/mw/platform/psn/gamer/savyultras90/profile/type/wz')
我收到错误消息“不允许:未验证”
我如何在一个网站上进行身份验证,并保持登录状态以从依赖该身份验证的API调用?我昨天对此进行了尝试,但最终取得了一些进展。问题是您必须获得身份验证令牌。这里可以遵循以下步骤:但在R中不可用 我的代码一开始可以工作,只要您不再进行身份验证(仍在试图找出原因)。基本上,我所做的是翻译链接中的步骤,并从GET中提取响应中的内容:
# Get token ---------------------------------------------------------------
resp <- GET('https://profile.callofduty.com/cod/login')
cookies = c(
'XSRF-TOKEN' = resp$cookies$value[1]
,'new_SiteId' = resp$cookies$value[2]
,'comid' = resp$cookies$value[3]
,'bm_sz' = resp$cookies$value[4]
,'_abck' = resp$cookies$value[5]
# ,'ACT_SSO_COOKIE' = resp$cookies$value[6]
# ,'ACT_SSO_COOKIE_EXPIRY' = resp$cookies$value[7]
# ,'atkn' = resp$cookies$value[8]
# ,'ACT_SSO_REMEMBER_ME' = resp$cookies$value[9]
# ,'ACT_SSO_EVENT' = resp$cookies$value[10]
# ,'pgacct' = resp$cookies$value[11]
# ,'CRM_BLOB' = resp$cookies$value[12]
# ,'tfa_enrollment_seen' = resp$cookies$value[13]
)
headers = c(
)
params = list(
`new_SiteId` = 'cod',
`username` = 'USER',
`password` = 'PWD',
`remember_me` = 'true',
`_csrf` = resp$cookies$value[1]
)
# Authenticate ------------------------------------------------------------
resp_post <- POST('https://profile.callofduty.com/do_login?new_SiteId=cod',
httr::add_headers(.headers=headers),
query = params,
httr::set_cookies(.cookies = cookies))
cookies = c(
'XSRF-TOKEN' = resp_post$cookies$value[1]
,'new_SiteId' = resp_post$cookies$value[2]
,'comid' = resp_post$cookies$value[3]
,'bm_sz' = resp_post$cookies$value[4]
,'_abck' = resp_post$cookies$value[5]
,'ACT_SSO_COOKIE' = resp_post$cookies$value[6]
,'ACT_SSO_COOKIE_EXPIRY' = resp_post$cookies$value[7]
,'atkn' = resp_post$cookies$value[8]
,'ACT_SSO_REMEMBER_ME' = resp_post$cookies$value[9]
,'ACT_SSO_EVENT' = resp_post$cookies$value[10]
,'pgacct' = resp_post$cookies$value[11]
,'CRM_BLOB' = resp_post$cookies$value[12]
,'tfa_enrollment_seen' = resp_post$cookies$value[13]
)
headers = c(
)
params = list(
`new_SiteId` = 'cod',
`username` = 'USER',
`password` = 'PWD',
`remember_me` = 'true',
`_csrf` = resp_post$cookies$value[1]
)
# Get data:
resp_psn <- httr::GET(url = 'https://my.callofduty.com/api/papi-client/stats/cod/v1/title/mw/platform/psn/gamer/savyultras90/profile/type/wz',
httr::add_headers(.headers=headers),
query = params,
httr::set_cookies(.cookies = cookies))
resp_psn_json <- content(resp_psn)
#领取代币---------------------------------------------------------------
resp看到我最近不得不为战区开发一个PHPAPI,我也许能够指导您如何处理这个问题。但首先要说几句话:
- 如果您想要请求每个玩家的数据,您需要使用适当的平台对每个用户进行单独的身份验证
- API请求的数量有限制
- 职责召唤API遵循严格的使用指南,只能由注册合作伙伴使用。使用API可能导致索赔,最终导致诉讼:
- 没有公开的API文档,API在过去也发生了变化,打破了一些第三方工具
然而,该过程涉及以下几个步骤:
注册拨打电话的设备
json正文的格式为{“deviceId”:“INSERT_ID_HERE”}
这将返回一个带有authHeader的响应,我们将在下一次调用中将其用作令牌
使用Activision凭据登录
设置以下标题:
Authorization: "INSERT_AUTHHEADER_HERE"
x_cod_device_id: "INSERT_PREVIOUSLY_USED_DEVICEID_HERE"
这将生成一个数据集,我们将从中保存以下数据:
rtkn,表演SSO和atkn
为数据调用所需的API
我们现在拥有进行API调用所需的所有数据
对于每个请求,我们将提交3个标题:
授权:“在此处插入\u AUTHHEADER\u”
x_cod_device_id:“在此插入以前使用过的设备id”
Cookie:ACT\u SSO\u LOCALE=en\u GB;国家=GB;API_CSRF_令牌=**生成_CSRF_令牌**;rtkn=**rtkn_此处**;ACT_SSO_COOKIE=**此处ACT_SSO_COOKIE**;atkn=**atkn_此处**
如需更多参考,您可以随时查看成功实现API的or。如果登录步骤不适用于尝试此操作的任何人,那是因为身份验证头需要是授权:“承载身份验证头\u令牌”