curl POST works in command line but not with Python

I need to run a curl POST to obtain API token as following:

curl - i -v -k -X POST -d '{"authType":"LOCAL","password":"mypw","username":"admin"}' --header "Content-Type:application/json" "https://x.x.x.x:xxxx/myapi_auth_path/login"

Everything runs well and I can obtain the token.

Now I want to do that with Python requests:

import requests

address = "https://x.x.x.x:xxxx/myapi_auth_path/login"
    
headers = {"Content-Type": "application/json"}
data = {"authType": "LOCAL",
        "password": "mypw",
        "username": "admin"}

res = requests.post(address, data=data, headers=headers, verify=False)

I get this error:

Expecting value: line 1 column 1 (char 0)

What is wrong with the Python code?


Solution 1:

You're using data=data which means your data dict will be form-encoded.

You can use json=data instead (this will also set the Content-Type header for you)

It's covered in this section of the docs,