我try 使用NodeJS后端应用程序从https://api.solscan.io/chaininfo获取数据,但收到429: Too many requests错误.

有趣的是,相同的API在使用fetchaxios的Reaction前端应用程序上运行得非常好.

我测试了其他一些方法,包括Windows上的curl,甚至从网络浏览器(Windows上的Chrome)获取API,它们都能像预期的那样工作.

+-------------+----------------+-----------------------+
|   Methods   |  Environment   |        Result         |
+-------------+----------------+-----------------------+
| fetch       | React Frontend | Works                 |
| axios       | React Frontend | Works                 |
| curl        | Windows        | Works                 |
| Web Browser | Chrome Windows | Works                 |
| fetch       | NodeJS Backend | 429 Too many requests |
| axios       | NodeJS Backend | 429 Too many requests |
| Postman     | Windows        | 429 Too many requests |
+-------------+----------------+-----------------------+

下面是我用来在NodeJS上获取API的代码:(引用axios方法)

const axios = require("axios");

axios.get("https://api.solscan.io/chaininfo")
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

我还用完全相同的代码创建了一个CodeSandbox项目,以防您想自己测试它:https://codesandbox.io/p/sandbox/fervent-morse-symc4p?file=%2Findex.js%3A6%2C32

NodeJS后端和Reaction前端之间的差异可能是什么造成的,我如何修复它以使其在后端工作?

推荐答案

它看起来像是您试图访问的API会判断您在浏览器请求中拥有的内容.在try 了一下该API之后,我发现添加一个User-Agents标头可以做到这一点:

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/89.0.4389.82 Safari/537.36',
    },
  })
  .then((response) => {
    console.log(response.data);
  })
  .catch((error) => {
    console.log(error)
    console.error(error.response.status)
    console.error(error.response.statusText);
  });

Javascript相关问答推荐

确定MutationRecord中removedNodes的索引

从实时数据库(Firebase)上的子类别读取数据

Bootstrap动态选项卡在切换选项卡后保持活动状态,导致元素堆叠

如何使覆盖div与可水平滚动的父div相关?

在react js中使用react—router—dom中的Link组件,分配的右侧不能被 destruct ''

单击ImageListItemBar的IconButton后,在Material—UI对话框中显示图像

如何在 cypress 中使用静态嵌套循环

使用GraphQL查询Uniswap的ETH价格

XSLT处理器未运行

将数组扩展到对象中

使用NextJS+MongoDB+Prisma ORM获取无效请求正文,无法发布错误

是否可以将Select()和Sample()与Mongoose结合使用?

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

处理TypeScrip Vue组件未初始化的react 对象

postman 预请求中的hmac/sha256内标识-从js示例转换

JAVASCRIPT SWITCH CASE语句:当表达式为';ALL';

如何让SVG图标在被点击和访问后改变 colored颜色 ,并在被访问后取消点击时恢复到原来的 colored颜色 ?

通过解构/功能组件接收props-prop验证中缺少错误"

在ReactJS上挂载组件时获得多个身份验证请求

JavaScript structuredClone在Chrome/Edge中获得了非法调用,但在NodeJS中没有