API在Chrome正常调用但Postman/Node.js返回403 Forbidden问题排查
Blur API后端调用403问题解决指南
核心原因
浏览器能正常请求但后端/Postman返回403,通常是因为API做了浏览器环境校验,后端请求缺少浏览器自动携带的关键验证信息或环境标识。
解决步骤
1. 完整复制浏览器Cookie
Blur的API可能依赖登录会话的Cookie验证,后端请求必须带上浏览器中该请求的完整Cookie:
- 打开Chrome DevTools的Network面板,找到目标请求,复制
Cookie请求头的完整字符串 - 将其添加到options的headers中,确保没有遗漏任何键值对
2. 严格匹配所有浏览器请求头
API可能校验请求头的完整性和细节,需确保以下头与浏览器完全一致:
User-Agent:必须使用Chrome的真实UA,不能用Node.js默认值Origin:设置为https://blur.io(浏览器跨域请求会自动携带)Referer:设置为对应页面的URL(比如https://blur.io/collection/mutant-ape-yacht-club)Sec-Fetch-*系列头:包括Sec-Fetch-Site、Sec-Fetch-Mode、Sec-Fetch-Dest,这些是浏览器特有的环境标识- 其他如
Accept、Accept-Language等也要完全复制
3. 处理动态验证参数
如果上述步骤仍无效,可能API存在动态生成的验证参数(如CSRF Token、签名):
- 重新抓包检查请求头,确认是否有动态变化的字段
- 若存在动态字段,需模拟浏览器端的生成逻辑,或使用无头浏览器(如Puppeteer)直接模拟浏览器请求流程
修改后的Node.js代码示例
const getListings = async function() { const options = { headers: { // 替换为你Chrome请求中的真实头信息 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Accept': 'application/json, text/plain, */*', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Accept-Encoding': 'gzip, deflate, br', 'Origin': 'https://blur.io', 'Referer': 'https://blur.io/collection/mutant-ape-yacht-club', 'Cookie': 'paste-your-full-chrome-cookie-here', 'Sec-Fetch-Site': 'same-site', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Dest': 'empty', 'Connection': 'keep-alive' } }; try { const res = await fetch(`https://core-api.prod.blur.io/v1/collections/mutant-ape-yacht-club/tokens?filters=%7B%22traits%22%3A%5B%5D%2C%22hasAsks%22%3Atrue%7D`, options); if (!res.ok) throw new Error(`请求失败:${res.status}`); return await res.json(); } catch (err) { console.error(err); throw err; } }
注意事项
- Cookie中的会话信息会过期,需定期更新
- 避免高频请求,防止IP被API封禁
- 若API反爬机制严格,优先使用无头浏览器模拟完整浏览器环境
内容的提问来源于stack exchange,提问作者Cizia
相关产品推荐
相关产品推荐

