Encode both keys and values for incoming unicode data as UTF-8, coincidentally fixing...
authorJohannes Gorset <jgorset@gmail.com>
Thu, 12 May 2011 08:16:21 +0000 (10:16 +0200)
committerJohannes Gorset <jgorset@gmail.com>
Thu, 12 May 2011 08:27:41 +0000 (10:27 +0200)
requests/core.py
test_requests.py

index b2bad895c31beed082c6d740208b6d87c43207d4..f12797ee0bf639a70d3089ee05fe76bc7979c2ee 100644 (file)
@@ -70,13 +70,16 @@ class Request(object):
         self.headers = headers
         self.files = files
         self.method = method
-        self.data = data
+        
+        self.data = {}
+        for (k, v) in data.items():
+            self.data.update({
+                k.encode('utf-8') if k.__class__ is unicode else k: \
+                v.encode('utf-8') if v.__class__ is unicode else v
+            })
 
         socket.setdefaulttimeout(timeout)
 
-        for (k, v) in self.data.iteritems():
-            self.data[k] = v.encode('utf-8')
-
         # url encode data if it's a dict
         if hasattr(data, 'items'):
             self._enc_data = urllib.urlencode(self.data)
index c73803c0b66ecc48980eab4a749ca1d538865b3a..89b69acd02568416a05a2533bfcb692de167d6ab 100755 (executable)
@@ -141,6 +141,8 @@ class RequestsTestSuite(unittest.TestCase):
 
     def test_unicode_get(self):
         requests.get('http://google.com', params={'foo': u'føø'})
+        requests.get('http://google.com', params={u'føø': u'føø'})
+        requests.get('http://google.com', params={'føø': 'føø'})
         requests.get('http://google.com', params={'foo': u'foo'})
         requests.get('http://google.com/ø', params={'foo': u'foo'})