Hi Cedric,

What version of Python are you using?

In my Python 2.7 installation, _set_hostport is a method of 
httplib.HTTPConnection.  It basically does some format checking and assigns 
host and port number.

Clearly some more work will be needed for a generic solution across supported 
versions of Python :)

Cheers,
Phil


    def _set_hostport(self, host, port):
        if port is None:
            i = host.rfind(':')
            j = host.rfind(']')         # ipv6 addresses have [...]
            if i > j:
                try:
                    port = int(host[i+1:])
                except ValueError:
                    raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
                host = host[:i]
            else:
                port = self.default_port
            if host and host[0] == '[' and host[-1] == ']':
                host = host[1:-1]
        self.host = host
        self.port = port


On 8 Jul 2014, at 10:45, Cedric Lebrun <[email protected]> wrote:

> Hi Philip,
> 
> Thanks for your help.
> But after patching httplib_ssl, I fall into now another error:
> 
> AttributeError: LibcloudHTTPSConnection instance has no attribute 
> '_set_hostport'
> 
> 
> Cedric
> 
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] 
> Sent: mardi 8 juillet 2014 09:56
> To: [email protected]
> Subject: Re: [dev] Libcloud behind ISA Proxy
> 
> Hi Cedric,
> 
> I ran into the same issue and patched libcloud.httplib_ssl.  I've included 
> the code snippets below.  The proxy I use doesn't require authentication but 
> hopefully you can adapt to make it do what you need.  I tested with Python 
> 2.7 - may need tweaking for Python 3.
> 
> Cheers,
> Phil
> 
> 
> I modified the LibcloudHTTPSConnection.__init__ to pick up the proxy settings 
> from the environment:
> 
> 
> class LibcloudHTTPSConnection(httplib.HTTPSConnection):
>    """
>    LibcloudHTTPSConnection
> 
>    Subclass of HTTPSConnection which verifies certificate names
>    if and only if CA certificates are available.
>    """
>    verify = True         # verify by default
>    ca_cert = None        # no default CA Certificate
> 
>    def __init__(self, *args, **kwargs):
>        """
>        Constructor
>        """
>        self._setup_verify()
>        httplib.HTTPSConnection.__init__(self, *args, **kwargs)
> 
>        # Support for HTTPS Proxy
>        if 'https_proxy' in os.environ:
>            from urlparse import urlparse
> 
>            self.set_tunnel(self.host, port=self.port)
> 
>            proxy_host = urlparse(os.environ['https_proxy']).netloc
>            self._set_hostport(proxy_host, None)
> 
> .
> .
> .
> 
> And then modified the connect call to use the tunnel:
> 
> 
>    def connect(self):
>        """
>        Connect
> 
>        Checks if verification is toggled; if not, just call
>        httplib.HTTPSConnection's connect
>        """
>        if not self.verify:
>            return httplib.HTTPSConnection.connect(self)
> 
>        # otherwise, create a connection and verify the hostname
>        # use socket.create_connection (in 2.6+) if possible
>        if getattr(socket, 'create_connection', None):
>            sock = socket.create_connection((self.host, self.port),
>                                            self.timeout)
>        else:
>            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>            sock.connect((self.host, self.port))
> 
>        # Support for HTTPS Proxy
>        if self._tunnel_host:
>            self.sock = sock
>            self._tunnel()
> 
>        self.sock = ssl.wrap_socket(sock,
>                                    self.key_file,
>                                    self.cert_file,
>                                    cert_reqs=ssl.CERT_REQUIRED,
>                                    ca_certs=self.ca_cert,
>                                    ssl_version=ssl.PROTOCOL_TLSv1)
>        cert = self.sock.getpeercert()
>        if not self._verify_hostname(self.host, cert):
>            raise ssl.SSLError('Failed to verify hostname')
> 
> 
> On 8 Jul 2014, at 07:23, Cedric Lebrun <[email protected]> wrote:
> 
>> Hi All,
>> 
>> I try to use Libcloud to connect to EC2.
>> My environments (CentOS 6.5 and Ubuntu 14.04) are behind a proxy server that 
>> requires authentication (MS ISA Proxy Server).
>> I tried with defining environment variables HTTP_PROXY and HTTPS_PROXY, but 
>> still doesn't work.
>> Is there a way to set a proxy and proxy credentials directly using Libcloud 
>> ? Or should I have to patch the http_lib to implement UrlLib2 ProxyHandler ?
>> 
>> Thanks for your help,
>> CL
> 
> -- 
> Scanned by iCritical.

--
Scanned by iCritical.

Reply via email to