Запросы python не распознают параметры

Я запрашиваю mindbodyapi для получения токена с помощью следующего кода, используя библиотеку requests

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"))

Во втором случае вы передаете API Key в заголовках, а учетные данные - в теле запроса. В первом случае вы передаете и API Key, и учетные данные вместе в строке запроса, а не в теле запроса. См. 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')
Вернуться на верх