Hi Cedric, That’s great news.
I thought you’d mentioned that the proxy you were connecting through also needed authentication credentials. - Is that the case and if so what additional changes did you need to make to the code? Cheers, Phil On 16 Jul 2014, at 13:29, Cedric Lebrun <[email protected]> wrote: > With Python 3.4 (on Windows), I have finally succeeded using your patch. > > I have just had to replace > > self._set_hostport(proxy_host, None) > > by > > self.host = proxyHost > self.port = proxyPort > > > With the appropriate values for proxyHost and proxyPort. > > > Cedric > > -----Original Message----- > From: Cedric Lebrun [mailto:[email protected]] > Sent: mercredi 16 juillet 2014 08:22 > To: [email protected] > Subject: RE: [dev] Libcloud behind ISA Proxy > > Hi Phil, > > Sorry for my late reply because of vacations :-) I've tried with Python 2.7 > on a CentOS environment as well as with Python 3.4 on a Windows 7 > environment. But in both case, no success so far. > Will continue investigating. > > Thank you. > Cedric > > -----Original Message----- > From: [email protected] [mailto:[email protected]] > Sent: mardi 8 juillet 2014 15:29 > To: [email protected] > Subject: Re: [dev] Libcloud behind ISA Proxy > > 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 <[email protected]> wrote: > >> Hi Philip, >> >> I'm using Python 2.7 as well (2.7.7). >> And Libcloud 0.15.1 >> >> Cedric >> >> -----Original Message----- >> From: [email protected] [mailto:[email protected]] >> Sent: mardi 8 juillet 2014 12:03 >> To: [email protected] >> 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 <[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. > > -- > Scanned by iCritical. -- Scanned by iCritical.
