CoinMarketCap widget接口请求无响应返回403错误1020如何解决?
问题原因
- 你收到的
403 error code:1020是Cloudflare服务的专属拦截错误,代表当前请求被站点的Web应用防火墙(WAF)判定为异常爬虫请求,直接拒绝访问。 - 浏览器可以正常访问的原因是浏览器发起请求时会自动携带
User-Agent、Accept、Accept-Language等一系列符合正常用户访问特征的请求头,通过了Cloudflare的校验规则,而你当前的代码请求只配置了极少的头参数,没有模拟浏览器特征,所以被拦截。
修复方案
修改请求配置,补充模拟真实浏览器的请求头即可,参考修改后的代码:
'use strict'; const rp = require('request-promise'); const requestOptions = { method: 'GET', uri: 'https://3rdparty-apis.coinmarketcap.com/v1/cryptocurrency/widget?id=3501&convert=BTC,ETH,USD', headers: { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5; rv:109.0) Gecko/20100101 Firefox/116.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive' }, json: true, gzip: true }; rp(requestOptions).then(response => { console.log('API Call response:', response["data"]["3501"]["quote"]); }).catch((err) => { console.log('API Call error:', err.message); });
注:原代码中不需要额外做
JSON.parse,配置json:true后request-promise会自动解析返回的JSON数据。
内容的提问来源于stack exchange,提问作者RasmonT
相关产品推荐
相关产品推荐

