Skip to content

Instantly share code, notes, and snippets.

@chmodx
Created November 27, 2022 23:45
Show Gist options
  • Save chmodx/45e65fec4704321999664591a1bc00c2 to your computer and use it in GitHub Desktop.
Save chmodx/45e65fec4704321999664591a1bc00c2 to your computer and use it in GitHub Desktop.
Python3 simple SSL server. In order to generate private key and certificate file use letsencrypt or something similar
from http.server import HTTPServer, SimpleHTTPRequestHandler
import ssl, os
import json, logging
class HTTPSHandler(SimpleHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
def do_GET(self):
logging.info("GET request,\nPath: %s\nHeaders:\n%s\n", str(self.path), str(self.headers))
self._set_headers()
#print('GET %s (from client %s)' % (self.path, self.client_address))
print(self.headers)
def do_POST(self):
length = int(self.headers['Content-Length'])
body = self.rfile.read(length)
message = json.loads(body)
logging.info("POST request,\nPath: %s\nHeaders:\n%s\n\nBody:\n%s\n",
str(self.path), str(self.headers), body.decode('utf-8'))
self._set_headers()
self.wfile.write(json.dumps(message).encode('utf-8'))
def run(server_class=HTTPServer, handler_class=HTTPSHandler, port=443):
logging.basicConfig(level=logging.INFO)
httpd = HTTPServer(('0.0.0.0', port), HTTPSHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, keyfile='key.pem', certfile="cert.pem", server_side=True)
logging.info('Starting HTTPS server...\n')
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
logging.info('Stopping HTTPS server...\n')
if __name__ == '__main__':
from sys import argv
if len(argv) == 2:
run(port=int(argv[1]))
else:
run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment