mirror of https://github.com/python/cpython
Fixed Issue6894, urllib2 doesn't respect "no_proxy" environment
This commit is contained in:
parent
723fb3adc8
commit
274686631a
|
@ -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'))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -398,6 +398,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment
|
||||||
|
|
||||||
- Issue #7086: Added TCP support to SysLogHandler, and tidied up some
|
- Issue #7086: Added TCP support to SysLogHandler, and tidied up some
|
||||||
anachronisms in the code which were a relic of 1.5.2 compatibility.
|
anachronisms in the code which were a relic of 1.5.2 compatibility.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue