def test_https_proxy(self): self.setup_env({'https_proxy': 'http://proxy.tests.com:8080'}) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(proxy_dict['https'], 'http://proxy.tests.com:8080') self.assertEqual(proxy_dict.get('http'), None) self.assertEqual(len(proxy_dict), 1) self.setup_env({'HTTPS_PROXY': 'http://proxy.tests.com:8080'}) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(proxy_dict['https'], 'http://proxy.tests.com:8080') self.assertEqual(proxy_dict.get('http'), None) self.assertEqual(len(proxy_dict), 1)
def test_proxy_exclusion(self): self.setup_env({'http_proxy': 'http://proxy1.tests.com:8081', 'https_proxy': 'http://proxy2.tests.com:8082', 'no_proxy': 'www.tests.com'}) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(len(proxy_dict), 0) self.setup_env({'http_proxy': 'http://proxy1.tests.com:8081', 'HTTPS_PROXY': 'http://proxy2.tests.com:8082', 'NO_PROXY': 'www.tests.com'}) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(len(proxy_dict), 0)
def test_http_https_proxy(self): self.setup_env({'http_proxy': 'http://proxy1.tests.com:8081', 'https_proxy': 'http://proxy2.tests.com:8082'}) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(proxy_dict['http'], 'http://proxy1.tests.com:8081') self.assertEqual(proxy_dict['https'], 'http://proxy2.tests.com:8082') self.assertEqual(len(proxy_dict), 2) self.setup_env({'http_proxy': 'http://proxy1.tests.com:8081', 'HTTPS_PROXY': 'http://proxy2.tests.com:8082'}) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(proxy_dict['http'], 'http://proxy1.tests.com:8081') self.assertEqual(proxy_dict['https'], 'http://proxy2.tests.com:8082') self.assertEqual(len(proxy_dict), 2)
def test_proxy_exclusion(self): self.setup_env({ 'http_proxy': 'http://proxy1.tests.com:8081', 'https_proxy': 'http://proxy2.tests.com:8082', 'no_proxy': 'www.tests.com' }) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(len(proxy_dict), 0) self.setup_env({ 'http_proxy': 'http://proxy1.tests.com:8081', 'HTTPS_PROXY': 'http://proxy2.tests.com:8082', 'NO_PROXY': 'www.tests.com' }) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(len(proxy_dict), 0)
def test_http_https_proxy(self): self.setup_env({ 'http_proxy': 'http://proxy1.tests.com:8081', 'https_proxy': 'http://proxy2.tests.com:8082' }) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(proxy_dict['http'], 'http://proxy1.tests.com:8081') self.assertEqual(proxy_dict['https'], 'http://proxy2.tests.com:8082') self.assertEqual(len(proxy_dict), 2) self.setup_env({ 'http_proxy': 'http://proxy1.tests.com:8081', 'HTTPS_PROXY': 'http://proxy2.tests.com:8082' }) proxy_dict = u.get_environ_proxies('www.tests.com:81') self.assertEqual(proxy_dict['http'], 'http://proxy1.tests.com:8081') self.assertEqual(proxy_dict['https'], 'http://proxy2.tests.com:8082') self.assertEqual(len(proxy_dict), 2)
def http_connection(url, proxy=None, ssl_compression=True): """ Make an HTTPConnection or HTTPSConnection :param url: url to connect to :param proxy: proxy to connect through, if any; None by default; str of the format 'http://127.0.0.1:8888' to set one :param ssl_compression: Whether to enable compression at the SSL layer. If set to 'False' and the pyOpenSSL library is present an attempt to disable SSL compression will be made. This may provide a performance increase for https upload/download operations. :returns: tuple of (parsed url, connection object) :raises ClientException: Unable to handle protocol scheme """ url = encode_utf8(url) parsed = urlparse(url) if proxy: proxy_parsed = urlparse(proxy) else: proxies = get_environ_proxies(parsed.netloc) proxy = proxies.get(parsed.scheme, None) proxy_parsed = urlparse(proxy) if proxy else None host = proxy_parsed.netloc if proxy else parsed.netloc if parsed.scheme == 'http': conn = HTTPConnection(host) elif parsed.scheme == 'https': if ssl_compression is True: conn = HTTPSConnection(host) else: conn = HTTPSConnectionNoSSLComp(host) else: raise ClientException('Cannot handle protocol scheme %s for url %s' % (parsed.scheme, repr(url))) def putheader_wrapper(func): @wraps(func) def putheader_escaped(key, value): func(encode_utf8(key), encode_utf8(value)) return putheader_escaped conn.putheader = putheader_wrapper(conn.putheader) def request_wrapper(func): @wraps(func) def request_escaped(method, url, body=None, headers=None): validate_headers(headers) url = encode_utf8(url) if body: body = encode_utf8(body) func(method, url, body=body, headers=headers or {}) return request_escaped conn.request = request_wrapper(conn.request) if proxy: try: # python 2.6 method conn._set_tunnel(parsed.hostname, parsed.port) except AttributeError: # python 2.7 method conn.set_tunnel(parsed.hostname, parsed.port) return parsed, conn