简体   繁体   中英

python requests not recognizing params

I am requesting to mindbodyapi to get token with the following code using requests library

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

gives a response as follows

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

But if I request the following way it works, anybody could tell me, what I am doing wrong on the above code.

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

In the second one, you are passing the API Key in headers and the credentials in the body of the request. In the first, you are sending both the API Key and credentials together in the query string, not the request body. Refer to requests.request() docs

Just use two dictionaries like in your second code and the correct keywords, I think it should work:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM