HTTPS connection Python

230,704

Solution 1

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>

Solution 2

To check for ssl support in Python 2.6+:

try:
    import ssl
except ImportError:
    print "error: no ssl support"

To connect via https:

import urllib2

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

Solution 3

import requests
r = requests.get("https://stackoverflow.com") 
data = r.content  # Content of response

print r.status_code  # Status code of response
print data

Solution 4

using

class httplib.HTTPSConnection

http://docs.python.org/library/httplib.html#httplib.HTTPSConnection

Solution 5

If using httplib.HTTPSConnection:

Please take a look at:

Changed in version 2.7.9:

This class now performs all the necessary certificate and hostname checks by default. To revert to the previous, unverified, behavior ssl._create_unverified_context() can be passed to the context parameter. You can use:

if hasattr(ssl, '_create_unverified_context'):
  ssl._create_default_https_context = ssl._create_unverified_context
Share:
230,704

Related videos on Youtube

chrisg
Author by

chrisg

All things serverless at the minute. Enjoy travelling and getting my hands on any piece of technology that is of course going to make my life amazing :)

Updated on December 01, 2020

Comments

  • chrisg
    chrisg over 3 years

    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.

  • Bruno
    Bruno over 13 years
    Note that this doesn't verify the remote certificate, therefore you don't really get security this way (as you don't really know which server you're really talking to).
  • mpaskov
    mpaskov over 7 years
    How is this different compared to other answers? Maybe try to elaborate a bit more.
  • bjg222
    bjg222 about 5 years
    @notilas, this code does work. If you just print r, you will get a string version of the response object itself rather than the content of the response, which is what you typed above, <Resposne [200]>. That is simply saying that the request was successful (200 is the HTTP code for success). Try looking at r.content or r.text (or r.json() if you're content is JSON) to get the actual result of the request.
  • notilas
    notilas about 5 years
    @bjg222 Thanks for kind explanation.
  • stark
    stark about 5 years
    Wrong url in tequest
  • mahshid.r
    mahshid.r about 5 years
    how to check IP with this response ?