使用Python请求获取Spotify授权码时遭遇206服务器错误
问题解决思路
核心错误点分析
- 响应处理逻辑错误:Spotify的
/authorize端点不会直接返回JSON格式的授权码。该端点的正常流程是重定向到你配置的redirect_uri,并在URL参数中携带code,而非返回JSON响应。你调用.json()会因返回内容非JSON格式触发异常,这也是206部分响应出现的原因之一。 - 冗余请求头干扰:GET请求无需设置
Content-Type: application/json,这个头仅用于POST请求发送JSON请求体时,多余的头部字段可能干扰服务器正常处理请求。 - 缺失用户交互环节:授权码流程必须经过用户手动在浏览器中登录Spotify账号、确认授权应用的步骤,直接用
requests.get发送请求会跳过该交互,服务器无法完成授权校验,因此返回异常响应。
修正后的实现步骤
步骤1:生成授权URL并引导用户访问
先构造合法的授权URL,让用户在浏览器中打开完成授权操作:
import requests CLIENT_ID = "你的客户端ID" REDIRECT_URI = "你的重定向URI" code_params = { 'response_type': 'code', 'client_id': CLIENT_ID, 'redirect_uri': REDIRECT_URI, 'scope': 'user-read-private user-read-email', } # 生成标准授权URL auth_url = requests.Request('GET', 'https://accounts.spotify.com/authorize', params=code_params).prepare().url print("请在浏览器中打开以下URL完成授权:") print(auth_url)
步骤2:提取授权码
用户完成授权后,Spotify会自动重定向到你设置的redirect_uri,此时URL格式类似:https://你的重定向地址/callback?code=实际授权码,直接从该URL的code参数中提取授权码即可。
步骤3:用授权码换取访问令牌
拿到code后,通过POST请求获取访问令牌:
token_params = { 'grant_type': 'authorization_code', 'code': '用户授权后得到的code', 'redirect_uri': REDIRECT_URI, 'client_id': CLIENT_ID, 'client_secret': '你的客户端密钥', } token_response = requests.post('https://accounts.spotify.com/api/token', data=token_params) token_data = token_response.json() print(token_data) # 返回结果包含access_token、refresh_token等关键信息
额外注意事项
- 确保
REDIRECT_URI与Spotify开发者后台配置的地址完全一致,包括协议(http/https)、域名、路径,任何细微差异都会导致授权失败。 - 若需自动化完成授权流程(无需手动打开浏览器),可使用
selenium等浏览器自动化工具模拟用户登录、授权操作。
内容的提问来源于stack exchange,提问作者Victor Zheng
相关产品推荐
相关产品推荐

