在 python 中发送 post 到 spotify api 的请求时出现问题
Problem sending post requests to spotify api in python
def queue_song(session_id):
song_uri='spotify:track:5RwV8BvLfX5injfqYodke9'
tokens = get_user_tokens(session_id)
headers = {'Content-Type': 'application/json',
'Authorization': "Bearer " + tokens.access_token,
}
url = BASE_URL +'player/queue'
data={
'uri':song_uri
}
response = requests.post(url,headers=headers,data=data).json()
print(response)
输出:
{'error': {'status': 400, 'message': 'Required parameter uri missing'}}
https://developer.spotify.com/documentation/web-api/reference/#/operations/add-to-queue
I dont thing there is any problem with auth tokens... coz 'GET' requests are working fine
默认情况下,在 requests.post()
中使用 data=
会将内容类型设置为 application/x-www-form-urlencoded
,这使得 body 类似于 HTTP 表单请求。
Spotify 的 API 基于 JSON,因此您的数据需要是有效的 json 数据。
您可以通过两种方式完成:
response = requests.post(url,headers=headers,data=json.dumps(data)).json()
或者,更简单地说:
response = requests.post(url,headers=headers,json=data).json()
这样您就不需要手动设置 application/json
header。
编辑:
在查看了您链接的 API 文档后,您所做的调用有更多错误。
您正在 data
中发送参数 - 这是请求的 body。但是 Spotify API 指定了需要放在 Query
中的参数,即 URI 的查询字符串。这意味着您的请求应该是:
response = requests.post(url,headers=headers,params=data).json() # set query string not body
def queue_song(session_id):
song_uri='spotify:track:5RwV8BvLfX5injfqYodke9'
tokens = get_user_tokens(session_id)
headers = {'Content-Type': 'application/json',
'Authorization': "Bearer " + tokens.access_token,
}
url = BASE_URL +'player/queue'
data={
'uri':song_uri
}
response = requests.post(url,headers=headers,data=data).json()
print(response)
输出:
{'error': {'status': 400, 'message': 'Required parameter uri missing'}}
https://developer.spotify.com/documentation/web-api/reference/#/operations/add-to-queue
I dont thing there is any problem with auth tokens... coz 'GET' requests are working fine
默认情况下,在 requests.post()
中使用 data=
会将内容类型设置为 application/x-www-form-urlencoded
,这使得 body 类似于 HTTP 表单请求。
Spotify 的 API 基于 JSON,因此您的数据需要是有效的 json 数据。
您可以通过两种方式完成:
response = requests.post(url,headers=headers,data=json.dumps(data)).json()
或者,更简单地说:
response = requests.post(url,headers=headers,json=data).json()
这样您就不需要手动设置 application/json
header。
编辑: 在查看了您链接的 API 文档后,您所做的调用有更多错误。
您正在 data
中发送参数 - 这是请求的 body。但是 Spotify API 指定了需要放在 Query
中的参数,即 URI 的查询字符串。这意味着您的请求应该是:
response = requests.post(url,headers=headers,params=data).json() # set query string not body