summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSenthil Kumaran <orsenthil@gmail.com>2009-10-11 02:00:07 (GMT)
committerSenthil Kumaran <orsenthil@gmail.com>2009-10-11 02:00:07 (GMT)
commit274686631ac8cd31250db6c402fda382350a6337 (patch)
tree10da341b3d49b82eb8067be090722e447098a306
parent723fb3adc8ea0d45a70a93bcdb9d142afb8d2221 (diff)
downloadcpython-274686631ac8cd31250db6c402fda382350a6337.zip
cpython-274686631ac8cd31250db6c402fda382350a6337.tar.gz
cpython-274686631ac8cd31250db6c402fda382350a6337.tar.bz2
Fixed Issue6894, urllib2 doesn't respect "no_proxy" environment
-rw-r--r--Lib/test/test_urllib2.py16
-rw-r--r--Lib/urllib2.py8
-rw-r--r--Misc/NEWS2
3 files changed, 25 insertions, 1 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index d4288f8..e04d4a0 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -943,6 +943,22 @@ class HandlerTests(unittest.TestCase):
self.assertEqual([(handlers[0], "http_open")],
[tup[0:2] for tup in o.calls])
+ def test_proxy_no_proxy(self):
+ os.environ['no_proxy'] = 'python.org'
+ o = OpenerDirector()
+ ph = urllib2.ProxyHandler(dict(http="proxy.example.com"))
+ o.add_handler(ph)
+ req = Request("http://www.perl.org/")
+ self.assertEqual(req.get_host(), "www.perl.org")
+ r = o.open(req)
+ self.assertEqual(req.get_host(), "proxy.example.com")
+ req = Request("http://www.python.org")
+ self.assertEqual(req.get_host(), "www.python.org")
+ r = o.open(req)
+ self.assertEqual(req.get_host(), "www.python.org")
+ del os.environ['no_proxy']
+
+
def test_proxy_https(self):
o = OpenerDirector()
ph = urllib2.ProxyHandler(dict(https='proxy.example.com:3128'))
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index 7ccf14b..a6c3e29 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -111,7 +111,7 @@ from urllib import (unwrap, unquote, splittype, splithost, quote,
splitattr, ftpwrapper, splituser, splitpasswd, splitvalue)
# support for FileHandler, proxies via environment variables
-from urllib import localhost, url2pathname, getproxies
+from urllib import localhost, url2pathname, getproxies, proxy_bypass
# used in User-Agent header sent
__version__ = sys.version[:3]
@@ -698,14 +698,20 @@ class ProxyHandler(BaseHandler):
def proxy_open(self, req, proxy, type):
orig_type = req.get_type()
proxy_type, user, password, hostport = _parse_proxy(proxy)
+
if proxy_type is None:
proxy_type = orig_type
+
+ if req.host and proxy_bypass(req.host):
+ return None
+
if user and password:
user_pass = '%s:%s' % (unquote(user), unquote(password))
creds = base64.b64encode(user_pass).strip()
req.add_header('Proxy-authorization', 'Basic ' + creds)
hostport = unquote(hostport)
req.set_proxy(hostport, proxy_type)
+
if orig_type == proxy_type or orig_type == 'https':
# let other handlers take care of it
return None
diff --git a/Misc/NEWS b/Misc/NEWS
index ddd909f..42a8cd9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -398,6 +398,8 @@ Core and Builtins
Library
-------
+- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment
+
- Issue #7086: Added TCP support to SysLogHandler, and tidied up some
anachronisms in the code which were a relic of 1.5.2 compatibility.