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

Python requests实现Sonos授权时返回invalid_request错误如何解决

Sonos授权接口invalid_request报错原因及修复方案

常见报错原因

  • 回调地址不匹配:代码中填写的redirect_uri必须和Sonos开发者后台注册应用时填报的回调地址完全一致,包括协议、域名、端口、路径,哪怕末尾多斜杠、大小写不一致都会触发报错。
  • 授权码无效:authorization_code为一次性凭证,有效期极短,重复使用、拿到凭证后间隔太久再调用兑换接口、凭证被截断/转义都会导致无效。
  • Basic认证编码错误:手动拼接Base64认证头时容易出现编码格式问题,导致身份校验不通过。
  • 请求参数异常:虽当前代码已覆盖必填参数,仍需确认从前端拿到的code字段完整无篡改。

修复方案

  1. 优先核对回调地址:登录Sonos开发者后台,找到对应应用的配置项,确认回调地址和代码中redirect_uri的取值http://localhost:8000/sonos完全一致。
  2. 重新获取授权码:每次测试都重新走用户授权流程获取新的code,拿到后立刻调用兑换接口,避免过期。
  3. 优化认证逻辑,替换手动编码Base64的方案,改用requests内置的auth参数自动处理Basic认证,修改后的代码如下:
import requests

client_secret = "*******************************"
client_id = "*******************************"

code = request.data["code"]
state = request.data["state"]

headers = {
    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
}

data = {
    'grant_type': 'authorization_code',
    'code': code,
    'redirect_uri': 'http://localhost:8000/sonos'
}

response = requests.post(
    'https://api.sonos.com/login/v3/oauth/access',
    headers=headers,
    data=data,
    auth=(client_id, client_secret)
)

print("response status: ", response.status_code)
print("response content: ", response.text)
  1. 若修改后仍报错,可先打印接口返回的完整状态码和响应文本,获取更详细的错误提示进一步定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:18:01