diff --git a/requests/models.py b/requests/models.py index 6d6265d0..3b8750fc 100644 --- a/requests/models.py +++ b/requests/models.py @@ -414,7 +414,7 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): content_type = None length = None - if json is not None: + if data == {} and json is not None: content_type = 'application/json' body = complexjson.dumps(json) @@ -443,7 +443,7 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): if files: (body, content_type) = self._encode_files(files, data) else: - if data and json is None: + if data: body = self._encode_params(data) if isinstance(data, basestring) or hasattr(data, 'read'): content_type = None diff --git a/test_requests.py b/test_requests.py index ecddbdb9..6279f64e 100755 --- a/test_requests.py +++ b/test_requests.py @@ -1082,6 +1082,13 @@ class RequestsTestCase(unittest.TestCase): assert 'application/json' in r.request.headers['Content-Type'] assert {'life': 42} == r.json()['json'] + def test_json_param_post_should_not_override_data_param(self): + r = requests.Request(method='POST', url='http://httpbin.org/post', + data={'stuff': 'elixr'}, + json={'music': 'flute'}) + prep = r.prepare() + assert 'stuff=elixr' == prep.body + def test_response_iter_lines(self): r = requests.get(httpbin('stream/4'), stream=True) assert r.status_code == 200