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 b2bad89..f12797e 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 c73803c..89b69ac 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'})