summaryrefslogtreecommitdiff
path: root/python2
diff options
context:
space:
mode:
Diffstat (limited to 'python2')
-rw-r--r--python2/httplib2/__init__.py51
1 files changed, 38 insertions, 13 deletions
diff --git a/python2/httplib2/__init__.py b/python2/httplib2/__init__.py
index f55e596..d1dc89d 100644
--- a/python2/httplib2/__init__.py
+++ b/python2/httplib2/__init__.py
@@ -729,7 +729,8 @@ class KeyCerts(Credentials):
name/password are mapped to key/cert."""
pass
-class AllHosts(object): pass
+class AllHosts(object):
+ pass
class ProxyInfo(object):
"""Collect information required to use a proxy."""
@@ -762,17 +763,22 @@ class ProxyInfo(object):
"""
Read proxy info from the environment variables.
"""
- if method not in ['http', 'https']: return
+ if method not in ['http', 'https']:
+ return
- env_var = method+'_proxy'
+ env_var = method + '_proxy'
url = os.environ.get(env_var, os.environ.get(env_var.upper()))
- if not url: return
+ if not url:
+ return
pi = cls.from_url(url, method)
no_proxy = os.environ.get('no_proxy', os.environ.get('NO_PROXY', ''))
- bypass_hosts = no_proxy.split(',') if no_proxy else []
+ bypass_hosts = []
+ if no_proxy:
+ bypass_hosts = no_proxy.split(',')
# special case, no_proxy=* means all hosts bypassed
- if no_proxy == '*': bypass_hosts = AllHosts
+ if no_proxy == '*':
+ bypass_hosts = AllHosts
pi.bypass_hosts = bypass_hosts
return pi
@@ -783,13 +789,27 @@ class ProxyInfo(object):
Construct a ProxyInfo from a URL (such as http_proxy env var)
"""
url = urlparse.urlparse(url)
- ident, sep, host_port = url.netloc.rpartition('@')
- username, sep, password = ident.partition(':')
- host, sep, port = host_port.partition(':')
+ username = None
+ password = None
+ port = None
+ if '@' in url[1]:
+ ident, host_port = url[1].split('@', 1)
+ if ':' in ident:
+ username, password = ident.split(':', 1)
+ else:
+ password = ident
+ else:
+ host_port = url[1]
+ if ':' in host_port:
+ host, port = host_port.split(':', 1)
+ else:
+ host = host_port
+
if port:
port = int(port)
else:
port = dict(https=443, http=80)[method]
+
proxy_type = 3 # socks.PROXY_TYPE_HTTP
return cls(
proxy_type = proxy_type,
@@ -804,10 +824,15 @@ class ProxyInfo(object):
def bypass_host(self, hostname):
"""Has this host been excluded from the proxy config"""
- return self.bypass_hosts is AllHosts or any(
- hostname.endswith(domain)
- for domain in self.bypass_hosts
- )
+ if self.bypass_hosts is AllHosts:
+ return True
+
+ bypass = False
+ for domain in self.bypass_hosts:
+ if hostname.endswith(domain):
+ bypass = True
+
+ return bypass
class HTTPConnectionWithTimeout(httplib.HTTPConnection):