From: Senthil Kumaran Date: Mon, 27 Sep 2010 01:40:59 +0000 (+0000) Subject: Merged revisions 85025 via svnmerge from X-Git-Tag: v2.7.1rc1~235 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=176c73df0fea08a2472f7b617764d74287b57f98;p=python Merged revisions 85025 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r85025 | senthil.kumaran | 2010-09-27 06:56:03 +0530 (Mon, 27 Sep 2010) | 6 lines Fix Issue1595365 - Adding the req.headers after the un-redirect headers have been added. This helps in accidental overwritting of User-Agent header to default value. To preserve the old behavior, only headers not in unredirected headers will be updated. ........ --- diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py index 56e952d147..5ace162e7b 100644 --- a/Lib/test/test_urllib2net.py +++ b/Lib/test/test_urllib2net.py @@ -172,6 +172,18 @@ class OtherNetworkTests(unittest.TestCase): finally: res.close() + def test_custom_headers(self): + url = "http://www.example.com" + opener = urllib2.build_opener() + request = urllib2.Request(url) + self.assertFalse(request.header_items()) + opener.open(request) + self.assertTrue(request.header_items()) + self.assertTrue(request.has_header('User-agent')) + request.add_header('User-Agent','Test-Agent') + opener.open(request) + self.assertEqual(request.get_header('User-agent'),'Test-Agent') + def _test_urls(self, urls, handlers, retry=True): import time import logging diff --git a/Lib/urllib2.py b/Lib/urllib2.py index 5c717a4c5d..adc6d8c55a 100644 --- a/Lib/urllib2.py +++ b/Lib/urllib2.py @@ -1127,8 +1127,10 @@ class AbstractHTTPHandler(BaseHandler): h = http_class(host, timeout=req.timeout) # will parse host:port h.set_debuglevel(self._debuglevel) - headers = dict(req.headers) - headers.update(req.unredirected_hdrs) + headers = dict(req.unredirected_hdrs) + headers.update(dict((k, v) for k, v in req.headers.items() + if k not in headers)) + # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket,