axios 出现 403 错误,但适用于邮递员和浏览器

403 error with axios but works on postman and browser

我通过这个第三方 api 在魔法伊甸园获得了 Nfts。 http://api-mainnet.magiceden.io/rpc/getGlobalActivitiesByQuery?q=%7B%22%24match%22%3A%7B%22txType%22%3A%22initializeEscrow%22%2C%22blockTime%22%3A%7B%22%24gt%22%3A1643468983%7D%7D%2C%22%24sort%22%3A%7B%22blockTime%22%3A-1%7D%7D

它在邮递员和浏览器上以结果响应,但在 node.js 中导致 axios 出现 403 错误。

如何获取 node.js 中的数据?

 const res = await axios.get(
    'http://api-mainnet.magiceden.io/rpc/getGlobalActivitiesByQuery?q=%7B%22%24match%22%3A%7B%22txType%22%3A%22initializeEscrow%22%2C%22blockTime%22%3A%7B%22%24gt%22%3A1643468983%7D%7D%2C%22%24sort%22%3A%7B%22blockTime%22%3A-1%7D%7D',  
    { 
      headers : {
        "Content-Type": "application/json",
        "Access-Control-Allow-Credentials": "*"
      }
    }
  );
  return res.data;

可能是因为CORS错误。 您可以使用 Cors 代理来修复它。 请试一试。

const CORS_PROXY_API = `https://cors.ryanking13.workers.dev/?u=`;
const magicedenAPI = `http://api-mainnet.magiceden.io/rpc/getGlobalActivitiesByQuery?q=%7B%22%24match%22%3A%7B%22txType%22%3A%22initializeEscrow%22%2C%22blockTime%22%3A%7B%22%24gt%22%3A1643468983%7D%7D%2C%22%24sort%22%3A%7B%22blockTime%22%3A-1%7D%7D`
const { data } = await axios({
  method: 'get',
  url: `${CORS_PROXY_API}${magicedenAPI}`
});

在此处使用代理不会有帮助,因为他们针对 bots/scripts 设置了 Cloudflare 保护并且需要存在 cookie:screenshot 1, screenshot 2

你应该联系他们的支持并索取 API 密钥(他们有 public API v2 即将推出),然后在 Authorization: Bearer <token>

这里有几点需要注意: 他们的 API v2 仍在开发中,缺少一些基本功能。使用他们当前的 v1 API 不需要 API 密钥(这是他们的支持人员所说的)但它确实具有针对脚本攻击的机器人保护。

我对是否使用 API v2 犹豫不决,因为它连最基本的东西都没有,而且我不希望它很快推出。就个人而言,我希望与设法将 v1 集成到他们的应用程序中的人取得联系,看看他们为了能够做到这一点而遵循了哪些必要步骤。

如果您设法找到了这方面的一些新信息,请告诉我。我也会编辑这条评论,以防我发现如何正确设置 v1 连接。

编辑:设法通过使用 https://github.com/puppeteer/puppeteer library. Started a small headless instance of Chrome and I hit the ME API with that browser like so: screenshot 3

让它工作