Python请求库头授权问题

时间:2017-07-12 17:52:19

标签: python python-2.7 unicode python-requests spotify

我正在尝试使用Spotify Web API访问我的Spotify设备。有关我尝试访问的特定API端点,请参阅此link。我在macOS Sierra的virtualenv中使用Python 2.7。

我已经拥有了一个授权令牌,我曾经用它做过其他几个函数调用,所以我知道它有效。然而,这是我第一次使用请求库而不是Spotipy包装器,它将http请求抽象为Spotipy函数调用。

上面链接中的文档说明我需要在标题中传递我的授权令牌。我理解在请求模块中你应该将头文件作为字典传递,其中键和值都是字符串。

以下是我用来发出请求的代码:

token_string = token.encode('ascii','ignore')
    print type(token_string)
    headers = {"Authorization":token_string}
    r=requests.get("https://api.spotify.com/v1/me/player/devices", headers=headers)

我将令牌编码为字符串,因为我读取了请求模块更喜欢unicode上的字符串,而令牌最初是unicode。

我一直收到400错误(请参阅下面的打印内容),这是一个授权问题。我认为问题可能是我没有正确传递授权令牌。有没有人对此有任何见解?

<Response [400]>

1 个答案:

答案 0 :(得分:1)

根据发布页面上的示例判断,您应该使用Bearer前缀进行授权(为什么?'检查 5。将令牌返回到您的应用部分Spotify Web API Authorization Guide),所以:

headers = {"Authorization", "Bearer {}".format(token_string)}
r = requests.get("https://api.spotify.com/v1/me/player/devices", headers=headers)

如果您的令牌有效,那么该令牌有效,您无需进行任何编码或任何操作 - 只需将其存储在token_string的面值中。

已经有Python Spotify客户端模块了,所以不要自己动手,为什么不使用其中一个,比如spotipy甚至在官方Spotify API examples页面上引用?