resolve_redirects now checks for a scheme before converting the scheme to lowercase...
authorBob Carroll <bob.carroll@alum.rit.edu>
Wed, 1 May 2013 06:17:18 +0000 (23:17 -0700)
committerBob Carroll <bob.carroll@alum.rit.edu>
Sun, 26 May 2013 21:44:22 +0000 (14:44 -0700)
requests/sessions.py
test_requests.py

index 776f97a..af63d49 100644 (file)
@@ -98,8 +98,9 @@ class SessionRedirectMixin(object):
                 url = '%s:%s' % (parsed_rurl.scheme, url)
 
             # The scheme should be lower case...
-            scheme, uri = url.split('://')
-            url = '%s://%s' % (scheme.lower(), uri)
+            if '://' in url:
+                scheme, uri = url.split('://', 1)
+                url = '%s://%s' % (scheme.lower(), uri)
 
             # Facilitate non-RFC2616-compliant 'location' headers
             # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource')
index 4a4831e..5517eda 100755 (executable)
@@ -495,6 +495,9 @@ class RequestsTestCase(unittest.TestCase):
             headers['ACCEPT'.encode('ascii')],
             'application/json'
         )
+    def test_uppercase_scheme(self):
+        r = requests.get('HTTP://example.com/')
+        self.assertEqual(r.status_code, 200)
 
     def test_transport_adapter_ordering(self):
         s = requests.Session()
@@ -702,5 +705,10 @@ class TestCaseInsensitiveDict(unittest.TestCase):
         self.assertEqual(frozenset(cid), keyset)
 
 
+
+    def test_uppercase_scheme_redirect(self):
+        r = requests.get(httpbin('redirect-to'), params={'url': 'HTTP://example.com/'})
+
+
 if __name__ == '__main__':
     unittest.main()