Cha*_*ost 6 python django spotify
这是我向https://accounts.spotify.com/api/token发出 POST 请求的众多尝试之一。
范围设置为“播放列表-修改-公共,播放列表-修改-私有”。
我使用的是 Python 3.7,Django 2.1.3。
无论我做什么, response_data 都会返回 {'error': 'invalid_client'}
我已经尝试了很多事情,包括根据此特定请求的官方 Spotify 文档在请求正文中传递 client_id/client_secret ......无济于事。
请帮忙!
def callback(request):
auth_token = request.GET.get('code') # from the URL after user has clicked accept
code_payload = {
'grant_type': 'authorization_code',
'code': str(auth_token),
'redirect_uri': REDIRECT_URI,
}
auth_str = '{}:{}'.format(CLIENT_ID, CLIENT_SECRET)
b64_auth_str = base64.b64encode(auth_str.encode()).decode()
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic {}'.format(b64_auth_str)
}
post_request = requests.post(SPOTIFY_TOKEN_URL, data=code_payload, headers=headers)
response_data = json.loads(post_request.text)
# ==> {'error': 'invalid_client'}
Run Code Online (Sandbox Code Playgroud)
小智 14
从文档中
发送客户端 ID 和密钥的另一种方法是作为 POST 正文中的请求参数(client_id 和 client_secret),而不是在标头中发送 Base64 编码的它们。
SPOTIFY_TOKEN = "https://accounts.spotify.com/api/token"
request_body = {
"grant_type": GRANT_TYPE,
"code": code,
"redirect_uri": REDIRECT_URI,
"client_id": SPOTIFY_CLIENT_ID,
"client_secret": SPOTIFY_CLIENT_SECRET,
}
r = requests.post(url=SPOTIFY_TOKEN, data=request_body)
resp = r.json()
Run Code Online (Sandbox Code Playgroud)
这也有效。
sol*_*oke 10
我怀疑问题出在Authorization标题中的无效字符。尝试使用urlsafe_b64encode而不是b64encode准备该标头值:
b64_auth_str = base64.urlsafe_b64encode(auth_str.encode()).decode()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5282 次 |
| 最近记录: |