Closed
Description
Starting from 20.4.1, I can no longer make requests with weirdly-encoded query parameters.
Here's a small example program that makes such a request:
import treq
from twisted.internet.task import react
URL = 'http://requestbin.net/r/1l2gc1o1'
def main(reactor):
d = treq.get(URL, params={b'foo': 'Hello'.encode('utf-32')})
return d.addCallback(print)
react(main)
When run with treq 20.3.0:
(tmp-a84c01591caa48e) [16:54|jerith@meklon] ~/.virtualenvs/tmp-a84c01591caa48e% python foo.py
<treq.response._Response 200 'text/html; charset=utf-8' unknown size>
And with treq 20.4.1:
(tmp-a84c01591caa48e) [16:56|jerith@meklon] ~/.virtualenvs/tmp-a84c01591caa48e% python foo.py
Traceback (most recent call last):
File "foo.py", line 10, in <module>
react(main)
File "/Users/jerith/.virtualenvs/tmp-a84c01591caa48e/lib/python3.8/site-packages/twisted/internet/task.py", line 909, in react
finished = main(_reactor, *argv)
File "foo.py", line 7, in main
d = treq.get(URL, params={b'foo': 'Hello'.encode('utf-32')})
File "/Users/jerith/.virtualenvs/tmp-a84c01591caa48e/lib/python3.8/site-packages/treq/api.py", line 24, in get
return _client(**kwargs).get(url, headers=headers, **kwargs)
File "/Users/jerith/.virtualenvs/tmp-a84c01591caa48e/lib/python3.8/site-packages/treq/client.py", line 119, in get
return self.request('GET', url, **kwargs)
File "/Users/jerith/.virtualenvs/tmp-a84c01591caa48e/lib/python3.8/site-packages/treq/client.py", line 167, in request
query=parsed_url.query + tuple(_coerced_query_params(params))
File "/Users/jerith/.virtualenvs/tmp-a84c01591caa48e/lib/python3.8/site-packages/treq/client.py", line 351, in _coerced_query_params
value = value.decode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
#265 (comment) seems like relevant context here.