Fixing User-agent header problem introduced with Python 2.7.1
authorrobmadole <robmadole@gmail.com>
Wed, 30 Mar 2011 05:07:24 +0000 (00:07 -0500)
committerrobmadole <robmadole@gmail.com>
Wed, 30 Mar 2011 05:07:24 +0000 (00:07 -0500)
requests/core.py
test_requests.py

index 252d8b6..ecb6f23 100644 (file)
@@ -122,13 +122,22 @@ class Request(object):
 
             _handlers.append(self.auth.handler)
 
-        if _handlers:
-            _handlers.extend(get_handlers())
-            opener = urllib2.build_opener(*_handlers)
-            return opener.open
-        else:
+        if not _handlers:
             return urllib2.urlopen
 
+        _handlers.extend(get_handlers())
+        opener = urllib2.build_opener(*_handlers)
+
+        if self.headers:
+            # Allow default headers in the opener to be overloaded
+            normal_keys = [k.capitalize() for k in self.headers]
+            for key, val in opener.addheaders[:]:
+                if key not in normal_keys:
+                    continue
+                # Remove it, we have a value to take its place
+                opener.addheaders.remove((key, val))
+
+        return opener.open
 
     def _build_response(self, resp):
         """Build internal Response object from given response."""
index 97d0e55..c3759f3 100644 (file)
@@ -29,19 +29,24 @@ class RequestsTestSuite(unittest.TestCase):
         self.assertEqual(r.status_code, 200)
 
     def test_HTTP_200_OK_GET_WITH_PARAMS(self):
-
         heads = {'User-agent': 'Mozilla/5.0'}
         
         r = requests.get('http://www.google.com/search', params={'q': 'test'}, headers=heads)
         self.assertEqual(r.status_code, 200)
 
-
     def test_HTTP_200_OK_GET_WITH_MIXED_PARAMS(self):
-
         heads = {'User-agent': 'Mozilla/5.0'}
 
         r = requests.get('http://google.com/search?test=true', params={'q': 'test'}, headers=heads)
         self.assertEqual(r.status_code, 200)
+
+    def test_user_agent_transfers(self):
+        """Issue XX"""
+        heads = {'User-agent':
+                 'Mozilla/5.0 (github.com/kennethreitz/requests)'}
+
+        r = requests.get('http://whatsmyua.com', headers=heads);
+        self.assertTrue(heads['User-agent'] in r.content)
         
     def test_HTTP_200_OK_HEAD(self):
         r = requests.head('http://google.com')
@@ -65,7 +70,6 @@ class RequestsTestSuite(unittest.TestCase):
         requests.auth_manager.empty()
 
     def test_POSTBIN_GET_POST_FILES(self):
-
         bin = requests.post('http://www.postbin.org/')
         print bin.url
         self.assertEqual(bin.status_code, 200)
@@ -77,7 +81,6 @@ class RequestsTestSuite(unittest.TestCase):
         self.assertEqual(post2.status_code, 201)
 
     def test_POSTBIN_GET_POST_FILES_WITH_PARAMS(self):
-
         bin = requests.post('http://www.postbin.org/')
         
         self.assertEqual(bin.status_code, 200)
@@ -87,7 +90,6 @@ class RequestsTestSuite(unittest.TestCase):
 
 
     def test_POSTBIN_GET_POST_FILES_WITH_HEADERS(self):
-
         bin = requests.post('http://www.postbin.org/')
         self.assertEqual(bin.status_code, 200)