Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 42ef4b1

Browse files
committed
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.
1 parent cb15988 commit 42ef4b1

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

Lib/test/test_urllib2net.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,18 @@ def test_urlwithfrag(self):
156156
self.assertEqual(res.geturl(),
157157
"http://docs.python.org/glossary.html")
158158

159+
def test_custom_headers(self):
160+
url = "http://www.example.com"
161+
opener = urllib.request.build_opener()
162+
request = urllib.request.Request(url)
163+
self.assertFalse(request.header_items())
164+
opener.open(request)
165+
self.assertTrue(request.header_items())
166+
self.assertTrue(request.has_header('User-agent'))
167+
request.add_header('User-Agent','Test-Agent')
168+
opener.open(request)
169+
self.assertEqual(request.get_header('User-agent'),'Test-Agent')
170+
159171
def _test_urls(self, urls, handlers, retry=True):
160172
import time
161173
import logging

Lib/urllib/request.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,8 +1063,10 @@ def do_open(self, http_class, req):
10631063
raise URLError('no host given')
10641064

10651065
h = http_class(host, timeout=req.timeout) # will parse host:port
1066-
headers = dict(req.headers)
1067-
headers.update(req.unredirected_hdrs)
1066+
1067+
headers = dict(req.unredirected_hdrs)
1068+
headers.update(dict((k, v) for k, v in req.headers.items()
1069+
if k not in headers))
10681070

10691071
# TODO(jhylton): Should this be redesigned to handle
10701072
# persistent connections?

0 commit comments

Comments
 (0)