From 23ee58d6ec47a06358008cb7a4ab4f9556edc285 Mon Sep 17 00:00:00 2001 From: Johannes Gorset Date: Thu, 12 May 2011 10:16:21 +0200 Subject: [PATCH] Encode both keys and values for incoming unicode data as UTF-8, coincidentally fixing a bug that caused UTF-8 encoded byte strings to be encoded twice and causing an UnicodeDecodeError. --- requests/core.py | 11 +++++++---- test_requests.py | 2 ++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/requests/core.py b/requests/core.py index b2bad89..f12797e 100644 --- a/requests/core.py +++ b/requests/core.py @@ -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) diff --git a/test_requests.py b/test_requests.py index c73803c..89b69ac 100755 --- a/test_requests.py +++ b/test_requests.py @@ -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'}) -- 2.7.4