Only pass unicode fieldnames to urllib3.
authorIb Lundgren <ib.lundgren@gmail.com>
Tue, 21 May 2013 08:46:28 +0000 (09:46 +0100)
committerIb Lundgren <ib.lundgren@gmail.com>
Tue, 21 May 2013 08:46:28 +0000 (09:46 +0100)
requests/models.py
test_requests.py

index 55716307fb252f7dbe2f36c9f5026482074804d0..db898bca4404da068753c79f1bf21cbadc5320f0 100644 (file)
@@ -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:
index aabce29b2bc91f137c3b28555e43b55a36c31bf5..2b5f231cf0d2ad2f4089832479907171e4b45300 100644 (file)
@@ -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})},