diff --git a/requests/models.py b/requests/models.py index 14094a6c..372d7ce1 100644 --- a/requests/models.py +++ b/requests/models.py @@ -28,7 +28,7 @@ from .utils import ( guess_json_utf) from .compat import ( cookielib, urlparse, urlunparse, urljoin, urlsplit, urlencode, str, bytes, - StringIO, is_py2, chardet, json, builtin_str, urldefrag, basestring) + StringIO, is_py2, is_py3, chardet, json, builtin_str, urldefrag, basestring) REDIRECT_STATI = (codes.moved, codes.found, codes.other, codes.temporary_moved) CONTENT_CHUNK_SIZE = 10 * 1024 @@ -222,13 +222,9 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): def prepare_method(self, method): """Prepares the given HTTP method.""" - try: - method = unicode(method) - except NameError: - # We're on Python 3. - method = str(method) - - self.method = method.upper() + self.method = method + if self.method is not None: + self.method = self.method.upper() def prepare_url(self, url, params): """Prepares the given HTTP URL.""" diff --git a/test_requests.py b/test_requests.py index 61634cd1..e55a4cf6 100644 --- a/test_requests.py +++ b/test_requests.py @@ -3,6 +3,7 @@ """Tests for Requests.""" +import json import os import unittest @@ -243,7 +244,14 @@ class RequestsTestCase(unittest.TestCase): self.assertEqual(r.status_code, 200) self.assertEqual(r.url, httpbin('get?test=foo&test=baz')) + def test_different_encodings_dont_break_post(self): + r = requests.post(httpbin('post'), + data={'stuff': json.dumps({'a': 123})}, + params={'blah': 'asdf1234'}, + files={'file': ('test_requests.py', open(__file__, 'rb'))}) + self.assertEqual(r.status_code, 200) + if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main()