Python 请求库 header 授权问题

Python requests library header authorization issue

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

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

上面 link 中的文档指出我需要在 header 中传递我的授权令牌。我知道在请求模块中,您应该将 headers 作为字典传递,其中键和值都是字符串。

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

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]>

根据他们在发布页面上的示例判断,您应该使用 Bearer 前缀进行授权(对于 'why?' 检查 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 which is even referenced on the official Spotify API examples 页面?