diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py index 8b9435ac60f..a4af01ae03b 100644 --- a/Lib/test/test_urllib2net.py +++ b/Lib/test/test_urllib2net.py @@ -156,6 +156,18 @@ def test_urlwithfrag(self): self.assertEqual(res.geturl(), "http://docs.python.org/glossary.html") + def test_custom_headers(self): + url = "http://www.example.com" + opener = urllib.request.build_opener() + request = urllib.request.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/urllib/request.py b/Lib/urllib/request.py index 16d81252d31..6c6450f8c0e 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -1063,8 +1063,10 @@ def do_open(self, http_class, req): raise URLError('no host given') h = http_class(host, timeout=req.timeout) # will parse host:port - 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)) # TODO(jhylton): Should this be redesigned to handle # persistent connections?