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.

Reply via email to