mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 17:15:35 +00:00
Fix matching on 'body' failing when Unicode symbols are present in them
Matching on bodies uses urllib.parse.parse_qs(), which fails to handle
UTF-8+URLEncoded POST bodies when the input is `bytes` rather than `str`,
causing matching to fail..
Fixed this by always doing decode('ascii') on URLEncoded POST bodies first.
This commit is contained in:
@@ -282,3 +282,17 @@ def test_filter_post_params(tmpdir, httpbin_both):
|
|||||||
requests.post(url, data={'key': 'value'})
|
requests.post(url, data={'key': 'value'})
|
||||||
with vcr.use_cassette(cass_loc, filter_post_data_parameters=['key']) as cass:
|
with vcr.use_cassette(cass_loc, filter_post_data_parameters=['key']) as cass:
|
||||||
assert b'key=value' not in cass.requests[0].body
|
assert b'key=value' not in cass.requests[0].body
|
||||||
|
|
||||||
|
|
||||||
|
def test_post_unicode_match_on_body(tmpdir, httpbin_both):
|
||||||
|
'''Ensure that matching on POST body that contains Unicode characters works.'''
|
||||||
|
data = {'key1': 'value1', '●‿●': '٩(●̮̮̃•̃)۶'}
|
||||||
|
url = httpbin_both + '/post'
|
||||||
|
|
||||||
|
with vcr.use_cassette(str(tmpdir.join('requests.yaml')), additional_matchers=('body',)):
|
||||||
|
req1 = requests.post(url, data).content
|
||||||
|
|
||||||
|
with vcr.use_cassette(str(tmpdir.join('requests.yaml')), additional_matchers=('body',)):
|
||||||
|
req2 = requests.post(url, data).content
|
||||||
|
|
||||||
|
assert req1 == req2
|
||||||
|
|||||||
@@ -56,9 +56,12 @@ def _transform_json(body):
|
|||||||
_xml_header_checker = _header_checker('text/xml')
|
_xml_header_checker = _header_checker('text/xml')
|
||||||
_xmlrpc_header_checker = _header_checker('xmlrpc', header='User-Agent')
|
_xmlrpc_header_checker = _header_checker('xmlrpc', header='User-Agent')
|
||||||
_checker_transformer_pairs = (
|
_checker_transformer_pairs = (
|
||||||
(_header_checker('application/x-www-form-urlencoded'), urllib.parse.parse_qs),
|
(_header_checker('application/x-www-form-urlencoded'),
|
||||||
(_header_checker('application/json'), _transform_json),
|
lambda body: urllib.parse.parse_qs(body.decode('ascii'))),
|
||||||
(lambda request: _xml_header_checker(request) and _xmlrpc_header_checker(request), xmlrpc_client.loads),
|
(_header_checker('application/json'),
|
||||||
|
_transform_json),
|
||||||
|
(lambda request: _xml_header_checker(request) and _xmlrpc_header_checker(request),
|
||||||
|
xmlrpc_client.loads),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user