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
让它工作
我通过这个第三方 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
让它工作