NodeJS后端调用Solscan API遇429错误,前端正常的问题排查
NodeJS后端调用Solscan API返回429错误,前端却正常的问题排查与解决
我在NodeJS后端应用中调用https://api.solscan.io/chaininfo API时,遇到了429: Too many requests错误,但相同的API在React前端使用fetch或axios调用完全正常。
测试多种调用方式后,结果如下:
| 调用方式 | 运行环境 | 结果 |
|---|---|---|
| fetch | React前端 | 正常返回结果 |
| axios | React前端 | 正常返回结果 |
| curl | Windows本地 | 正常返回结果 |
| 浏览器(Chrome) | Windows本地 | 正常返回结果 |
| fetch | NodeJS后端 | 429 Too many requests |
| axios | NodeJS后端 | 429 Too many requests |
| Postman | Windows本地 | 429 Too many requests |
NodeJS中使用axios调用API的原始代码:
const axios = require("axios"); axios.get("https://api.solscan.io/chaininfo") .then(response => { console.log(response.data); }) .catch(error => { console.error(error); });
原因分析
出现差异的核心原因是Solscan API服务对请求的标识头做了限流策略区分:
- 前端(浏览器、React)和本地curl请求会自动带上符合常规用户端的
User-Agent请求头,这类请求被服务端判定为普通用户请求,限流阈值较高; - NodeJS后端、Postman默认发送的请求头带有明显的非浏览器标识(比如NodeJS的默认
User-Agent为node-fetch/x.x.x或axios专属标识),Postman也会自带专属User-Agent,这类请求被服务端归为爬虫/批量请求范畴,限流阈值极低甚至直接触发拦截。
修复方案
在NodeJS的请求中添加模拟浏览器的请求头,重点设置User-Agent,让服务端识别为合法用户请求:
axios修改请求头示例
const axios = require("axios"); axios.get("https://api.solscan.io/chaininfo", { 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" } }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); });
fetch修改请求头示例
fetch("https://api.solscan.io/chaininfo", { 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" } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error));
额外注意:
- 不要频繁更换
User-Agent,避免被识别为恶意爬虫; - 如果后续仍出现限流,建议添加请求间隔控制,或查看Solscan官方文档申请API密钥,通过合法授权提升限流额度。
内容的提问来源于stack exchange,提问作者Code Plus
相关产品推荐
相关产品推荐

