请求MagicEden接口获取JSON失败,报JSONDecodeError如何解决?
问题解决方法
这个报错是因为接口返回的内容不是有效的JSON格式,大概率是网站的反爬机制识别出你的请求不是来自浏览器,返回了非JSON内容(比如验证页面、空内容)。可以按以下步骤解决:
先排查返回内容:在解析JSON前,先打印响应的状态码和文本,确认实际返回的是什么:
import requests url = 'https://api-mainnet.magiceden.io/idxv2/getBidsByMintAddresses?hideExpired=true&mintAddresses=GXXBt4tzJ6aGoNvz87Xzh1PqXwB4qVRdQdHcX65iXtRZ&direction=1&field=2&limit=500&offset=0' response = requests.get(url) print(response.status_code) print(response.text[:500]) # 打印前500字符查看内容如果状态码不是200,或者返回的是HTML/验证码页面,就说明被反爬拦截了。
添加请求头模拟浏览器:给请求加上浏览器的
User-Agent标识,让服务器认为是浏览器请求:import requests import json url = 'https://api-mainnet.magiceden.io/idxv2/getBidsByMintAddresses?hideExpired=true&mintAddresses=GXXBt4tzJ6aGoNvz87Xzh1PqXwB4qVRdQdHcX65iXtRZ&direction=1&field=2&limit=500&offset=0' headers = { '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' } response = requests.get(url, headers=headers) # 先检查请求是否成功 if response.status_code == 200: try: data = json.loads(response.text) print(data) except json.JSONDecodeError: print("返回内容不是JSON,内容片段:", response.text[:500]) else: print(f"请求失败,状态码:{response.status_code}")额外注意事项:
- 如果加了
User-Agent还是不行,可以从浏览器的请求里复制更多请求头(比如Accept、Referer)加到代码中; - 部分网站会校验Cookie,你可以从浏览器中复制对应接口的Cookie,加到请求的
cookies参数里; - 不要频繁发送请求,避免IP被封禁。
- 如果加了
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

