Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTTPS connection Python

I am trying to verify the that target exposes a https web service. I have code to connect via HTTP but I am not sure how to connect via HTTPS. I have read you use SSL but I have also read that it did not support certificate errors. The code I have got is from the python docs:

import httplib conn = httplib.HTTPConnection("www.python.org") conn.request("GET", "/index.html") r1 = conn.getresponse() print r1.status, r1.reason 

Does anyone know how to connect to HTTPS?

I already tried the HTTPSConenction but it responds with an error code claiming httplib does not have attribute HTTPSConnection. I also don't have socket.ssl available.

I have installed Python 2.6.4 and I don't think it has SSL support compiled into it. Is there a way to integrate this suppot into the newer python without having to install it again.

I have installed OpenSSL and pyOpenSsl and I have tried the below code from one of the answers:

import urllib2 from OpenSSL import SSL try:      response = urllib2.urlopen('https://example.com')       print 'response headers: "%s"' % response.info()  except IOError, e:      if hasattr(e, 'code'): # HTTPError          print 'http error code: ', e.code      elif hasattr(e, 'reason'): # URLError          print "can't connect, reason: ", e.reason      else:          raise 

I have got an error:

    Traceback (most recent call last):   File "<stdin>", line 2, in <module>   File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib.py", line 87, in urlopen     return opener.open(url)   File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib.py", line 203, in open     return self.open_unknown(fullurl, data)   File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib.py", line 215, in open_unknown     raise IOError, ('url error', 'unknown url type', type) IOError: [Errno url error] unknown url type: 'https' 

Does anyone know how to get this working?

-- UPDATE 

I have found out what the problem was, the Python version I was using did not have support for SSL. I have found this solution currently at: http://www.webtop.com.au/compiling-python-with-ssl-support.

The code will now work after this solution which is very good. When I import ssl and HTTPSConnection I know don't get an error.

Thanks for the help all.

like image 374
chrisg Avatar asked Jan 27 '10 11:01

chrisg


People also ask

How do I run HTTPS in Python?

Note: If you are using this to serve web traffic, you will need to use '0.0. 0.0' in place of 'localhost' to bind to all interfaces, change the port to 443 (the standard port for HTTPS), and run with superuser privileges in order to have the permission to bind to a well-known port.

What is Python HTTP client?

Python HTTP module defines the classes which provide the client-side of the HTTP and HTTPS protocols. In most of the programs, the HTTP module is not directly used and is clubbed with the urllib module to handle URL connections and interaction with HTTP requests.

What does SSL do in Python?

This module provides access to Transport Layer Security (often known as “Secure Sockets Layer”) encryption and peer authentication facilities for network sockets, both client-side and server-side. This module uses the OpenSSL library.


1 Answers

Python 2.x: docs.python.org/2/library/httplib.html:

Note: HTTPS support is only available if the socket module was compiled with SSL support.

Python 3.x: docs.python.org/3/library/http.client.html:

Note HTTPS support is only available if Python was compiled with SSL support (through the ssl module).

#!/usr/bin/env python  import httplib c = httplib.HTTPSConnection("ccc.de") c.request("GET", "/") response = c.getresponse() print response.status, response.reason data = response.read() print data # =>  # 200 OK # <!DOCTYPE html .... 

To verify if SSL is enabled, try:

>>> import socket >>> socket.ssl <function ssl at 0x4038b0> 
like image 112
miku Avatar answered Oct 01 '22 04:10

miku