python https server and client

来源:互联网 发布:mysql gis空间数据库 编辑:程序博客网 时间:2024/04/29 22:34

HTTPS SERVER:

  1. #!/usr/bin/env python  
  2.   
  3. import socket, os  
  4. from SocketServer import BaseServer  
  5. from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler  
  6. from SimpleHTTPServer import SimpleHTTPRequestHandler  
  7. from OpenSSL import SSL  
  8.   
  9. CERTIFICATE_PATH = os.getcwd() + '/CA/server.crt'  
  10. KEY_PATH = os.getcwd() + '/CA/private/server.key'  
  11.   
  12.   
  13. class SecureHTTPServer(HTTPServer):  
  14.     def __init__(self, server_address, HandlerClass):  
  15.         BaseServer.__init__(self, server_address, HandlerClass)  
  16.         ctx = SSL.Context(SSL.SSLv23_METHOD)  
  17.   
  18.         ctx.use_privatekey_file(KEY_PATH)  
  19.         ctx.use_certificate_file(CERTIFICATE_PATH)  
  20.   
  21.         self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type))  
  22.   
  23.         self.server_bind()  
  24.         self.server_activate()  
  25.   
  26. class MemberUpdateHandler(SimpleHTTPRequestHandler):  
  27.     def setup(self):  
  28.         self.connection = self.request  
  29.         self.rfile = socket._fileobject(self.request, "rb"self.rbufsize)  
  30.         self.wfile = socket._fileobject(self.request, "wb"self.wbufsize)  
  31.   
  32.     def do_GET(self):  
  33.         try:  
  34.             print 'path:'self.path  
  35.             print self.path.endswith('.txt')  
  36.             if self.path.endswith('.txt'):  
  37.                 self.send_response(200)  
  38.                 self.send_header('Content-type''text/html')  
  39.                 self.end_headers()  
  40.                 self.wfile.write("successful")  
  41.                 return  
  42.             else:  
  43.                 self.send_response(200)  
  44.                 self.send_header('Content-type''text/html')  
  45.                 self.end_headers()  
  46.                 self.wfile.write("not successful")  
  47.         except IOError:  
  48.             self.send_error(404'What you talking about willis?')  
  49.   
  50.   
  51. def test(HandlerClass = MemberUpdateHandler,  
  52.          ServerClass = SecureHTTPServer):  
  53.     server_address = (''4444)  
  54.     httpd = ServerClass(server_address, HandlerClass)  
  55.     sa = httpd.socket.getsockname()  
  56.     print "serving HTTPS on:", sa[0], "port:", sa[1], "..."  
  57.     httpd.serve_forever()  
  58.   
  59. if __name__ == '__main__':  
  60.     test()  

HTTPS CLIENT:

  1. #!/usr/bin/env python  
  2.   
  3. import os  
  4. import httplib  
  5. import socket  
  6.   
  7. KEY_FILE = os.getcwd() + '/CA/private/client.key'  
  8. CERT_FILE = os.getcwd() + '/CA/client.crt'  
  9. GET = "GET"  
  10.   
  11.   
  12. conn = httplib.HTTPSConnection('0.0.0.0''4444', cert_file = CERT_FILE)  
  13.   
  14. conn.request(GET, "/this.txt")  
  15. response = conn.getresponse()  
  16. print response.status, response.reason, response.read()  
  17.   
  18. conn.close()  


0 0
原创粉丝点击