使用Python Requests库调用MindBody API获取Token时提示‘Missing API key’错误的问题排查
问题分析与修复方案
嘿,我一眼就看出你Requests代码里的问题啦,主要是参数传递位置和请求体格式搞错了,和MindBody API的要求不匹配,才导致了"Missing API key"的错误。咱们一步步理清楚:
核心问题点
- 请求头参数放错地方了:MindBody的这个
usertoken/issue接口要求Api-Key和SiteId是放在**请求头(Headers)**里的,但你之前的Requests代码把它们和用户名密码一起塞到了params参数里——这个参数是用来拼接URL查询字符串的,API根本不会从这里读取Api-Key,自然就报缺失了。 - 请求体格式错误:接口要求把
Username和Password以JSON格式的请求体发送,而你用params=payload的方式,相当于把这些参数直接拼到了URL后面,完全不符合接口的接收要求。
修正后的Requests代码
按照API的要求调整参数位置和请求体格式后,代码就能正常工作了:
import requests from django.http import HttpResponse def get_staff_token(request): URL = "https://api.mindbodyonline.com/public/v6/usertoken/issue" # 把Api-Key和SiteId放到请求头中,这是接口要求的位置 headers = { 'Api-Key': API_KEY, 'SiteId': "1111111", 'Content-Type': "application/json" } # 用户名和密码作为JSON请求体的内容 payload = { 'Username': 'user@xyz.com', 'Password': 'xxxxxxxx', } # 使用json参数自动序列化字典为JSON,并设置正确的请求头 r = requests.post(url=URL, headers=headers, json=payload) print(r.text) return HttpResponse('Done')
补充说明
- 使用
requests.post的json参数时,Requests会自动帮你把字典序列化为JSON字符串,并且自动设置Content-Type: application/json请求头(当然手动在headers里指定也没问题,不会冲突)。 - 这个修正后的逻辑和你用http.client写的代码完全一致:请求头传递Api-Key和SiteId,请求体传递JSON格式的用户名密码,所以就能成功获取Token啦。
内容的提问来源于stack exchange,提问作者Biju
相关产品推荐
相关产品推荐

