Spotipy有效token调用playlist_upload_cover_image报401错误
问题根因
该问题由旧版本Spotipy库的逻辑缺陷导致,与token权限范围、封面图片格式无关:
- 你当前初始化Spotify客户端的写法为
sp = spotipy.Spotify(access_token),即直接传入裸token字符串。这种初始化模式下,库的自动鉴权逻辑仅会在发送application/json类型请求时,自动在请求头中携带Authorization字段。 playlist_change_details接口的请求体为JSON格式,鉴权头可正常注入,因此请求执行成功。playlist_upload_cover_image接口的请求体为纯base64编码图片内容,请求头Content-Type为image/jpeg,不属于JSON类请求。旧版本Spotipy构造这类请求时会跳过自动添加鉴权头的逻辑,最终发出的请求未携带token,触发401 "No token provided"错误。控制台日志中显示的「请求参数:{}」也可佐证该问题——请求构造阶段未正确注入鉴权头信息。
修复方案
- 方案一:直接升级Spotipy到最新版本,官方已修复该非JSON请求漏带鉴权头的问题,执行命令
pip install --upgrade spotipy即可。 - 方案二:若无法升级依赖,需调整客户端初始化逻辑,不要手动提取access_token字符串传入构造函数,改用官方标准的auth_manager参数传入OAuth实例即可。修改认证模块中客户端初始化部分的代码:
将原有代码:
替换为:sp = spotipy.Spotify(access_token)
该初始化方式下,所有类型的请求(包括非JSON格式的图片上传请求)都会被自动注入合法的Authorization请求头,不会出现token漏带问题。sp = spotipy.Spotify(auth_manager=sp_oauth) - 补充校验点:待token问题修复后,可检查传入的base64封面字符串是否携带
data:image/jpeg;base64,前缀,若有需删除该前缀,仅保留纯base64编码内容即可,避免触发图片格式校验错误。
内容的提问来源于stack exchange,提问作者MrSchiller
相关产品推荐
相关产品推荐

