Trying to use urllib3 to post JSON-encoded data. Just want my POST payload to be raw JSON string, with content type application/json. I just cannot see how to do this.
The urllib3 documentation describes posting data in "fields", i.e. dicts with (key,value) pairs, like how HTML forms are URL-encoded with the URL. But I don't want to do that.
The closest I've been able to get is this (I just guessed where to put the data, as it's not documented anywhere that I can find):
http = urllib3.PoolManager()
headers = urllib3.util.make_headers(basic_auth=key+":")
r = http.request_encode_body('POST', path, json.dumps(payload), headers=headers)
which causes this urllib3 error:
File "C:\Python27\lib\site-packages\urllib3-1.7.1-py2.7.egg\urllib3\filepost.py", line 44, in iter_field_objects
yield RequestField.from_tuples(*field)
TypeError: from_tuples() takes exactly 3 arguments (2 given)
Thanks for any pointers!
urllib3
, for some tasks, like asynchronous programming, using requests is not practical, but using the more explicit interface exposed by urllib3 is quite workable. in any case,urllib3
is much more convenient than any of the built in python libraries, (httplib or urllib/urllib2). – Gerianne