Node.js调用Activision站点登录POST接口无响应问题排查求助
问题排查与解决思路
无响应无报错的基础原因
你的axios配置未设置超时时间,默认状态下axios没有超时限制,请求被服务端拦截挂起后就会一直处于运行状态,没有任何输出。优先在config中添加timeout: 10000参数设置10秒超时,先拿到明确的错误提示。
人机验证的判断
你的猜测正确,Activision登录接口强制校验reCAPTCHA令牌,你当前提交的表单参数缺失g-recaptcha-response字段,这是核心校验项,缺少该参数时服务端会直接丢弃请求或挂起连接,不会返回任何响应内容。
其他请求规则问题
你当前的请求头配置不全,也会触发反爬机制被拦截:
- 缺少
Content-Type: application/x-www-form-urlencoded头,你使用qs序列化表单数据,必须匹配对应内容类型 - 只携带了XSRF-TOKEN单个Cookie,需要将GET登录页时拿到的所有Cookie完整带上,包括会话类Cookie
- 缺少和GET请求一致的
User-Agent头、Referer: https://www.activision.com/来源头,会被服务端判定为非法请求
修正后的代码示例
var axios = require('axios'); var qs = require('qs'); var data = qs.stringify({ 'username': 'myUserName', 'password': 'myPassword', 'remember_me': 'true', '_csrf': '实际获取的xsrfToken', 'g-recaptcha-response': '人机验证返回的令牌' // 必须补充的校验参数 }); var config = { method: 'post', url: 'https://s.activision.com/do_login?new_SiteId=activision', timeout: 10000, // 新增超时配置避免无限挂起 headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': '和GET登录页请求完全一致的UA标识', 'Referer': 'https://www.activision.com/', 'Cookie': "GET登录页返回的完整Cookie串" }, data : data }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
人机验证处理方案
- 测试阶段可以手动在浏览器触发一次登录验证,拿到有效期内的
g-recaptcha-response填入参数测试 - 自动化场景可以对接第三方打码服务,传入Activision站点的reCAPTCHA密钥获取验证令牌
内容的提问来源于stack exchange,提问作者ZzToP
相关产品推荐
相关产品推荐

