python 请求无法识别参数

python requests not recognizing params

我请求 mindbodyapi 使用请求库使用以下代码获取令牌

def get_staff_token(request):
    URL = "https://api.mindbodyonline.com/public/v6/usertoken/issue"
    payload = {
               'Api-Key': API_KEY,
               'SiteId': "1111111",
               'Username': 'user@xyz.com',
               'Password': 'xxxxxxxx',
               }
    r = requests.post(url=URL, params=payload)
    print(r.text)
    return HttpResponse('Done')

回复如下

{"Error":{"Message":"Missing API key","Code":"DeniedAccess"}}

但是如果我要求它以下面的方式工作,任何人都可以告诉我,我在上面的代码中做错了什么。

conn = http.client.HTTPSConnection("api.mindbodyonline.com")
                payload = "{\r\n\t\"Username\": \"username\",\r\n\t\"Password\": \"xxxxx\"\r\n}"
                headers = {
                    'Content-Type': "application/json",
                    'Api-Key': API_KEY,
                    'SiteId': site_id,
                    }
                conn.request("POST", "/public/v6/usertoken/issue", payload, headers)
                res = conn.getresponse()
                data = res.read()
                print(data.decode("utf-8"))

在第二个中,您将在 headers 中传递 API 密钥,并在请求的 body 中传递凭据。首先,您在查询字符串中同时发送 API 密钥和凭据,而不是请求 body。参考requests.request() docs

只需像在您的第二个代码中那样使用两个词典和正确的关键字,我认为它应该可以工作:

def get_staff_token(request):
    URL = "https://api.mindbodyonline.com/public/v6/usertoken/issue"
    payload = {
        'Username': 'user@xyz.com',
        'Password': 'xxxxxxxx',
    }
    headers = {
        'Content-Type': "application/json",
        'Api-Key': API_KEY,
        'SiteId': "1111111",
    }
    r = requests.post(url=URL, data=payload, headers=headers)
    print(r.text)
    return HttpResponse('Done')