Search code examples
pythonapiherokuflaskurlencode

How to send urlencoded parameters in POST request in python


I'm trying to deploy my production ready code to Heroku to test it. Unfortunately, it is not taking JSON data so we converted into x-www-form-urlencoded.

params = urllib.parse.quote_plus(json.dumps({
    'grant_type': 'X',
    'username': 'Y',
    'password': 'Z'
}))
r = requests.post(URL, data=params)
print(params)

It is showing an error in this line as I guess data=params is not in proper format.

Is there any way to POST the urlencoded parameters to an API?


Solution

  • You don't need to explicitly encode it, simply pass your dict to data argument and it will be encoded automatically.

    >>> r = requests.post(URL, data = {'key':'value'})
    

    From the official documentation:

    Typically, you want to send some form-encoded data — much like an HTML form. To do this, simply pass a dictionary to the data argument. Your dictionary of data will automatically be form-encoded when the request is made