Merged revisions 75333 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r75333 | senthil.kumaran | 2009-10-11 07:30:07 +0530 (Sun, 11 Oct 2009) | 3 lines

  Fixed Issue6894, urllib2 doesn't respect "no_proxy" environment
........
This commit is contained in:
Senthil Kumaran 2009-10-11 05:35:44 +00:00
parent 1ab4095e76
commit dff2028a1b
3 changed files with 25 additions and 1 deletions

View File

@ -943,6 +943,22 @@ class HandlerTests(unittest.TestCase):
self.assertEqual([(handlers[0], "http_open")], self.assertEqual([(handlers[0], "http_open")],
[tup[0:2] for tup in o.calls]) [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): def test_proxy_https(self):
o = OpenerDirector() o = OpenerDirector()
ph = urllib2.ProxyHandler(dict(https='proxy.example.com:3128')) ph = urllib2.ProxyHandler(dict(https='proxy.example.com:3128'))

View File

@ -111,7 +111,7 @@ from urllib import (unwrap, unquote, splittype, splithost, quote,
splitattr, ftpwrapper, splituser, splitpasswd, splitvalue) splitattr, ftpwrapper, splituser, splitpasswd, splitvalue)
# support for FileHandler, proxies via environment variables # 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 # used in User-Agent header sent
__version__ = sys.version[:3] __version__ = sys.version[:3]
@ -698,14 +698,20 @@ class ProxyHandler(BaseHandler):
def proxy_open(self, req, proxy, type): def proxy_open(self, req, proxy, type):
orig_type = req.get_type() orig_type = req.get_type()
proxy_type, user, password, hostport = _parse_proxy(proxy) proxy_type, user, password, hostport = _parse_proxy(proxy)
if proxy_type is None: if proxy_type is None:
proxy_type = orig_type proxy_type = orig_type
if req.host and proxy_bypass(req.host):
return None
if user and password: if user and password:
user_pass = '%s:%s' % (unquote(user), unquote(password)) user_pass = '%s:%s' % (unquote(user), unquote(password))
creds = base64.b64encode(user_pass).strip() creds = base64.b64encode(user_pass).strip()
req.add_header('Proxy-authorization', 'Basic ' + creds) req.add_header('Proxy-authorization', 'Basic ' + creds)
hostport = unquote(hostport) hostport = unquote(hostport)
req.set_proxy(hostport, proxy_type) req.set_proxy(hostport, proxy_type)
if orig_type == proxy_type or orig_type == 'https': if orig_type == proxy_type or orig_type == 'https':
# let other handlers take care of it # let other handlers take care of it
return None return None

View File

@ -124,6 +124,8 @@ Core and Builtins
Library Library
------- -------
- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment
- Issue #6790: Make it possible again to pass an `array.array` to - Issue #6790: Make it possible again to pass an `array.array` to
`httplib.HTTPConnection.send`. Patch by Kirk McDonald. `httplib.HTTPConnection.send`. Patch by Kirk McDonald.