Karthikeyan Singaravelan <[email protected]> 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 <[email protected]>
<https://bugs.python.org/issue36064>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com