You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何response.json()在PC正常,树莓派上触发JSONDecodeError?

问题分析与解决方案

核心原因

你遇到的问题本质是树莓派上的requests无法正确解码API返回的Brotli(br)压缩内容,导致拿到的是原始压缩数据,无法解析为JSON。PC端requests能自动处理是因为环境中已包含Brotli解码依赖,而树莓派默认缺少该组件。另外也可能是请求头中的br编码触发了服务器返回该格式,而本地无法解码。

具体解决步骤

1. 临时绕过Brotli压缩(最快见效)

修改请求头中的Accept-Encoding,移除br,只保留requests原生支持的gzip和deflate:

headers = {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",  # 去掉br编码
    "Accept-Language": "en-US,en;q=0.5",
    "Cache-Control": "no-cache",
    "Connection": "keep-alive",
    "Host": "api.sofascore.com",
    "Origin": "https://www.sofascore.com",
    "Pragma": "no-cache",
    "Referer": "https://www.sofascore.com/",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
}

修改后重新执行脚本,服务器会返回gzip或deflate压缩的内容,requests会自动解码,即可正常解析JSON。

2. 安装Brotli依赖(保留br编码支持)

如果需要继续使用Brotli压缩以获得更快的响应速度,在树莓派终端执行以下命令安装依赖:

pip3 install brotli

安装完成后,requests会自动识别并解码Brotli压缩的响应,无需修改请求头即可正常运行。

3. 额外排查项

  • 检查请求状态码:在调用.json()前先打印response.status_code,确认返回的是200 OK,如果是4xx/5xx状态码,说明请求被服务器拦截,需要调整请求头(比如更换User-Agent为树莓派适配的版本:"Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")。
  • 升级requests版本:树莓派默认的requests版本可能较旧,执行pip3 install --upgrade requests升级到最新版。

内容的提问来源于stack exchange,提问作者lemon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:15:09