How to POST JSON data with Python Requests? How to POST JSON data with Python Requests? python python

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


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