调用EA FIFA Pro Club接口本地正常,生产运行半年后突发503错误如何排查
排查建议
- 优先修复请求头不生效问题:从你提供的本地调试日志可见,实际发出的请求UA为
axios/0.18.0,和你代码中配置的Chrome UA不匹配,说明自定义请求头未正确生效。首先要修复该问题,确保请求头和真实浏览器发出的请求完全对齐,除了已配置的User-Agent、Referer外,还要补充Accept、Accept-Language、X-Requested-With等常规浏览器头。 - 验证IP是否被封禁:在生产服务器上使用curl工具,模拟和本地完全一致的请求头调用接口,如果curl也返回503,基本可以确定生产IP被EA的反爬策略拦截。可通过替换代理IP测试,如果替换后请求正常,后续使用代理池轮换IP即可解决。
- 补充Cookie校验逻辑:接口响应中存在
set-cookie字段,EA大概率近期新增了会话Cookie校验规则,之前运行正常是因为旧的Cookie未过期。现在需要先访问EA官网获取有效Cookie,后续调用搜索接口时携带对应Cookie,模拟正常用户访问流程。 - 调整请求频率:如果生产环境近期请求量上涨,会触发EA的频率限制规则返回503。可降低请求频率,每次请求增加1-3秒的随机延迟,避免被识别为爬虫。
- 对齐最新接口规则:EA可能近期更新了接口校验逻辑,可在浏览器端打开EA Pro Club的官方页面,抓包获取真实浏览器调用该接口的所有请求头,和你代码发出的请求头逐一对比,补齐缺失的校验头。
修复后代码示例
// 先安装axios-cookiejar-support和tough-cookie用于自动管理cookie const axios = require('axios'); const { wrapper } = require('axios-cookiejar-support'); const { CookieJar } = require('tough-cookie'); const jar = new CookieJar(); const eaClubsAxios = wrapper(axios.create({ baseURL: 'https://proclubs.ea.com/api/fifa/clubs/search', jar, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Referer': 'https://www.ea.com/', 'Accept': 'application/json, text/plain, */*', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'X-Requested-With': 'XMLHttpRequest' } })); const getEaClubs = async (platform, searchterm) => { // 先请求EA官网获取初始cookie await eaClubsAxios.get('https://www.ea.com/'); // 再请求搜索接口,参数放在params里避免编码问题 const eaClubs = await eaClubsAxios.get('', { params: { platform, clubName: searchterm } }); return eaClubs.data; };
内容的提问来源于stack exchange,提问作者user2633709
相关产品推荐
相关产品推荐

