Hi Cedric,

I’m using Python 2.7.2.  There seems to be differences between the two.  I 
would adapt your code to do the job of _set_hostport and set host and port 
separately.  They are public attributes in any case.

Cheers,
Phil

On 8 Jul 2014, at 13:50, Cedric Lebrun <cedric.leb...@asg.com> wrote:

> Hi Philip,
> 
> I'm using Python 2.7 as well (2.7.7).
> And Libcloud 0.15.1
> 
> Cedric
> 
> -----Original Message-----
> From: philip.kers...@stfc.ac.uk [mailto:philip.kers...@stfc.ac.uk] 
> Sent: mardi 8 juillet 2014 12:03
> To: dev@libcloud.apache.org
> Subject: Re: [dev] Libcloud behind ISA Proxy
> 
> 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 <cedric.leb...@asg.com> 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: philip.kers...@stfc.ac.uk [mailto:philip.kers...@stfc.ac.uk] 
>> Sent: mardi 8 juillet 2014 09:56
>> To: dev@libcloud.apache.org
>> 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 <cedric.leb...@asg.com> 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.

--
Scanned by iCritical.

Reply via email to