diff --git a/requests/models.py b/requests/models.py index 5fe570e2..29c06c6b 100644 --- a/requests/models.py +++ b/requests/models.py @@ -330,9 +330,10 @@ class Request(object): result = [] for k, vs in to_key_val_list(data): for v in isinstance(vs, list) and vs or [vs]: - result.append( - (k.encode('utf-8') if isinstance(k, str) else k, - v.encode('utf-8') if isinstance(v, str) else v)) + if v is not None: + result.append( + (k.encode('utf-8') if isinstance(k, str) else k, + v.encode('utf-8') if isinstance(v, str) else v)) return urlencode(result, doseq=True) else: return data diff --git a/tests/test_requests.py b/tests/test_requests.py index 0dba704a..8e2ebf18 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1112,5 +1112,15 @@ class RequestsTestSuite(TestSetup, TestBaseMixin, unittest.TestCase): Requests.exceptions.InvalidURL instead of UnicodeError.""" self.assertRaises(InvalidURL, get, 'http://.google.com/') + def test_none_vals_in_data_are_deleted(self): + """Test that keys with None as the value are removed instead of + being posted.""" + data = {'key1': 'value1', 'key2': None} + r = post(httpbin('post'), data=data) + vals = r.json['form'] + self.assertEqual(vals['key1'], 'value1') + # The 'key2' key should not have been sent. + self.assertTrue(vals.get('key2') is None) + if __name__ == '__main__': unittest.main()