コード例 #1
0
 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)
コード例 #2
0
 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)
コード例 #3
0
 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)
コード例 #4
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)
コード例 #5
0
 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)
コード例 #6
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)
コード例 #7
0
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