diff --git a/tests/integration/test_requests.py b/tests/integration/test_requests.py index 84a992b..804ab2e 100644 --- a/tests/integration/test_requests.py +++ b/tests/integration/test_requests.py @@ -38,6 +38,18 @@ def test_body(tmpdir, httpbin_both): assert content == requests.get(url).content +def test_get_empty_content_type_json(tmpdir, httpbin_both): + '''Ensure GET with application/json content-type and empty request body doesn't crash''' + url = httpbin_both + '/status/200' + headers = {'Content-Type': 'application/json'} + + with vcr.use_cassette(str(tmpdir.join('get_empty_json.yaml')), match_on=('body',)): + status = requests.get(url, headers=headers).status_code + + with vcr.use_cassette(str(tmpdir.join('get_empty_json.yaml')), match_on=('body',)): + assert status == requests.get(url, headers=headers).status_code + + def test_effective_url(tmpdir, httpbin_both): '''Ensure that the effective_url is captured''' url = httpbin_both.url + '/redirect-to?url=/html' diff --git a/vcr/matchers.py b/vcr/matchers.py index b54ed2f..8fe334e 100644 --- a/vcr/matchers.py +++ b/vcr/matchers.py @@ -49,7 +49,8 @@ def _transform_json(body): # Request body is always a byte string, but json.loads() wants a text # string. RFC 7159 says the default encoding is UTF-8 (although UTF-16 # and UTF-32 are also allowed: hmmmmm). - return json.loads(body.decode('utf-8')) + if body: + return json.loads(body.decode('utf-8')) _xml_header_checker = _header_checker('text/xml')