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.
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.
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.
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.
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With