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.