diff --git a/requests/models.py b/requests/models.py index 55716307..db898bca 100644 --- a/requests/models.py +++ b/requests/models.py @@ -105,7 +105,7 @@ class RequestEncodingMixin(object): for v in val: if v is not None: new_fields.append( - (field.encode('utf-8') if isinstance(field, str) else field, + (field.decode('utf-8') if isinstance(field, bytes) else field, v.encode('utf-8') if isinstance(v, str) else v)) for (k, v) in files: diff --git a/test_requests.py b/test_requests.py index aabce29b..2b5f231c 100644 --- a/test_requests.py +++ b/test_requests.py @@ -342,6 +342,16 @@ class RequestsTestCase(unittest.TestCase): files={'file': ('test_requests.py', open(__file__, 'rb'))}) self.assertEqual(r.status_code, 200) + def test_unicode_multipart_post_fieldnames(self): + r = requests.Request(method='POST', + url=httpbin('post'), + data={'stuff'.encode('utf-8'): 'elixr'}, + files={'file': ('test_requests.py', + open(__file__, 'rb'))}) + prep = r.prepare() + self.assertTrue(b'name="stuff"' in prep.body) + self.assertFalse(b'name="b\'stuff\'"' in prep.body) + def test_custom_content_type(self): r = requests.post(httpbin('post'), data={'stuff': json.dumps({'a': 123})},