GOAT接口GET请求Postman/Chrome正常但axios报1020错误如何解决
Cloudflare 1020错误原因说明
返回1020错误是Cloudflare防火墙判定请求存在异常访问特征,直接拒绝了连接,和接口本身的权限、参数正确性无关。
为什么Postman、Chrome可以正常访问,裸axios请求被拦截
- Postman发起请求时会默认携带一套接近真实浏览器的完整请求头,但你从Postman复制axios代码片段时,这些隐式默认头不会被自动写入生成的代码,最终发出去的请求缺少大量浏览器必带的头字段,Cloudflare识别到请求头特征不符合正常浏览器逻辑就会拦截。
- 高防护等级的Cloudflare规则会校验客户端TLS握手指纹(JA3指纹),Node.js环境下axios默认调用Node原生http模块发起请求,其TLS握手特征和Chrome、Postman的客户端指纹差异非常明显,会被直接判定为自动化爬虫请求触发拦截。
- Chrome/Postman访问站点时,会自动携带之前访问站点过程中Cloudflare下发的合法校验Cookie(比如
cf_clearance),裸axios请求没有任何站点上下文Cookie,无法通过校验。
axios请求修复方案
基础修复:补全合法请求头
先从正常访问该接口的Chrome/Postman中,复制成功请求的完整请求头,填入axios配置,核心必填头字段参考如下:
const axios = require('axios'); const config = { method: 'get', url: 'https://www.goat.com/web-api/v1/product_variants/buy_bar_data?productTemplateId=815559', headers: { // 替换为你当前Chrome浏览器实际的UA,禁止使用axios默认的axios/x.x.x标识 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept': 'application/json, text/plain, */*', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Referer': 'https://www.goat.com', 'Origin': 'https://www.goat.com' // 若浏览器访问时已生成cf_clearance等Cloudflare校验Cookie,需将Cookie字段一并填入 // 'Cookie': '从浏览器请求头中复制的完整Cookie字符串' } }; axios(config) .then(response => { console.log(JSON.stringify(response.data)); }) .catch(error => { console.log(error); });
指纹校验绕过
如果补全请求头后仍然返回1020,说明触发了Cloudflare的TLS指纹校验,原生Node.js环境的axios无法直接绕过,可选择以下两种方案:
- 直接通过真实浏览器上下文发起请求:使用Playwright/Puppeteer启动无界面Chrome实例,在页面环境中调用目标接口,请求特征和真实用户访问完全一致,不会被拦截,拿到返回结果后再回传给Node层处理即可。
- 替换axios底层请求适配器:使用支持自定义JA3指纹的请求库替换axios默认调用的Node原生http模块,模拟Chrome的TLS握手特征,配合合法请求头、有效Cookie即可正常请求。
额外注意事项
如果请求特征全部模拟正确仍然被拦截,需要检查出口IP:如果使用云服务器、代理池的数据中心IP,大概率已经被Cloudflare标记为爬虫IP段,更换为正常住宅IP即可恢复访问。
内容的提问来源于stack exchange,提问作者auvoybe
相关产品推荐
相关产品推荐

