Karthikeyan Singaravelan <tir.kar...@gmail.com> added the comment:
I guess key should be bytes instead of a dict with string key. Maybe the docs could be improved about the case where key in case of dict should be bytes. >>> from urllib.request import urlopen, Request >>> r = Request("http://httpbin.org/post", data={b'a': 'a'}) >>> resp = urlopen(r) >>> print(resp.read()) b'{\n "args": {}, \n "data": "", \n "files": {}, \n "form": {\n "a": ""\n }, \n "headers": {\n "Accept-Encoding": "identity", \n "Content-Length": "1", \n "Content-Type": "application/x-www-form-urlencoded", \n "Host": "httpbin.org", \n "User-Agent": "Python-urllib/3.8"\n }, \n "json": null, \n "origin": "123.201.136.26, 123.201.136.26", \n "url": "https://httpbin.org/post"\n}\n' See https://bugs.python.org/issue25439 for an open patch to ensure this is type checked. >>> from urllib.request import urlopen, Request >>> r = Request("http://httpbin.org/post", data={'a': 'a'}) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/urllib/request.py", line 332, in __init__ self.data = data File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/urllib/request.py", line 370, in data raise TypeError("Key should be type of bytes in POST data") TypeError: Key should be type of bytes in POST data Current code is not checking the type makes it pass during construction and then throw an error later like below : >>> from urllib.request import urlopen, Request >>> r = Request("http://httpbin.org/post", data={'a': 'a'}) >>> urlopen(r) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 222, in urlopen return opener.open(url, data, timeout) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 525, in open response = self._open(req, data) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 543, in _open '_open', req) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 503, in _call_chain result = func(*args) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1345, in http_open return self.do_open(http.client.HTTPConnection, req) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1317, in do_open encode_chunked=req.has_header('Transfer-encoding')) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1229, in request self._send_request(method, url, body, headers, encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1275, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1224, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1054, in _send_output + b'\r\n' TypeError: can't concat str to bytes ---------- nosy: +xtreak _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue36064> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com