From 2401f149750337970300383634f3942e9da3c68f Mon Sep 17 00:00:00 2001 From: robmadole Date: Wed, 30 Mar 2011 00:07:24 -0500 Subject: [PATCH] Fixing User-agent header problem introduced with Python 2.7.1 --- requests/core.py | 19 ++++++++++++++----- test_requests.py | 14 ++++++++------ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/requests/core.py b/requests/core.py index 252d8b6..ecb6f23 100644 --- a/requests/core.py +++ b/requests/core.py @@ -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.""" diff --git a/test_requests.py b/test_requests.py index 97d0e55..c3759f3 100644 --- a/test_requests.py +++ b/test_requests.py @@ -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) -- 2.34.1