调用Opensea GraphQL API返回403错误码1020如何解决
问题原因
error code: 1020是Cloudflare服务触发访问规则后返回的拒绝访问标识,Opensea使用Cloudflare做爬虫防护,你当前的请求触发了拦截规则,具体原因包括:
- request-promise未开启JSON序列化配置,直接传入对象类型的body参数时,不会自动转换为符合要求的JSON格式请求体,也不会补全
Content-Length等必要请求头,会被判定为非法请求 - 缺失Cloudflare人机验证后生成的
cf_clearanceCookie字段,非浏览器环境直接请求会被直接拦截 - 使用的User-Agent版本过旧,会被Cloudflare的爬虫特征库识别
- 未携带Opensea接口要求的API密钥,公网非浏览器环境调用无密钥请求会被限制访问
- 手动填写的Host、sec-fetch系列请求头和实际请求上下文不匹配,触发校验失败
调整方案
- 首先补全request-promise的基础配置,新增
json: true参数,移除冗余的手动配置头:
const options = { method: 'POST', url: 'https://api.opensea.io/graphql', json: true, // 自动序列化body为JSON,补全对应请求头 headers: { // 替换为你当前正在使用的最新浏览器User-Agent,不要使用过期版本 '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', 'content-type': 'application/json', // 填写你申请的Opensea公开接口API密钥 'X-API-KEY': '你的Opensea API密钥', accept: '*/*', origin: 'https://opensea.io', referer: 'https://opensea.io/' }, body: { id: 'collectionQuery', query: '原GraphQL查询语句保持不变', variables: { collection: 'beeple-special-edition', collections: ['beeple-special-edition'], collectionQuery: null, includeHiddenCollections: null, numericTraits: null, query: null, sortAscending: true, sortBy: 'PRICE', stringTraits: null, toggles: null, showContextMenu: true } } }
- 如果你需要模拟浏览器请求不使用官方API,可从浏览器正常请求的头信息中复制完整Cookie(重点包含
cf_clearance字段)添加到headers配置中,注意该Cookie有效期约2小时,过期后需要重新获取 - 控制请求频率,不要在短时间内发送大量重复请求,避免触发频率限制规则
- 如果持续被拦截,可使用代理IP轮换策略,避免单个IP被Cloudflare拉黑
内容的提问来源于stack exchange,提问作者vcosiekx
相关产品推荐
相关产品推荐

