How to POST JSON data with Python Requests?

How to POST JSON data with Python Requests?

Starting with Requests version 2.4.2, you can use the json= parameter (which takes a dictionary) instead of data= (which takes a string) in the call:

>>> import requests
>>> r = requests.post(http://httpbin.org/post, json={key: value})
>>> r.status_code
200
>>> r.json()
{args: {},
 data: {key: value},
 files: {},
 form: {},
 headers: {Accept: */*,
             Accept-Encoding: gzip, deflate,
             Connection: close,
             Content-Length: 16,
             Content-Type: application/json,
             Host: httpbin.org,
             User-Agent: python-requests/2.4.3 CPython/3.4.0,
             X-Request-Id: xx-xx-xx},
 json: {key: value},
 origin: x.x.x.x,
 url: http://httpbin.org/post}

It turns out I was missing the header information. The following works:

url = http://localhost:8080
data = {sender: Alice, receiver: Bob, message: We did it!}
headers = {Content-type: application/json, Accept: text/plain}
r = requests.post(url, data=json.dumps(data), headers=headers)

How to POST JSON data with Python Requests?

From requests 2.4.2 (https://pypi.python.org/pypi/requests), the json parameter is supported. No need to specify Content-Type. So the shorter version:

requests.post(http://httpbin.org/post, json={test: cheers})

Leave a Reply

Your email address will not be published. Required fields are marked *