HTTPS Web Server in Python 3

59 Views Asked by At

I am new to Python, so i am referring to some stack overflow Questions and tried few things. So i am able to create a HTTP server but when i am to create a HTTPS server it is not Starting the Server. I also need to use GET and POST.

This is the HTTPS Code:-

from http.server import HTTPServer, SimpleHTTPRequestHandler
import ssl

httpd = HTTPServer(('localhost', 1443), SimpleHTTPRequestHandler)
sslctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
print("SSL Context Created")
sslctx.check_hostname = False 
print("Removed Host Check")
sslctx.load_cert_chain(certfile='cert.pem', keyfile="key.pem")
print("Loaded Cert File")
httpd.socket = sslctx.wrap_socket(httpd.socket, server_side=True)
print("Added Socket")
httpd.serve_forever()
print("Server Start")

OUTPUT :-

python .\main.py
SSL Context Created
Removed Host Check
Loaded Cert File
Added Socket

This is the HTTP Code (Which is Working) :-

from http.server import HTTPServer, BaseHTTPRequestHandler
from io import BytesIO
import json
import ssl
import os

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        index = open('index.html', 'r')
        self.wfile.write(index.read().encode())

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        body = self.rfile.read(content_length)
        newBody = str(body)[2:len(body) + 2]
        print(body)
        print(newBody)

        formatedJson = json.loads(newBody)

        print(formatedJson)
        print(formatedJson["prompt"])

        self.send_response(200)
        self.end_headers()
        response = BytesIO()
        response.write(('This is POST request. ').encode())
        response.write(('Received: ').encode())
        response.write(body)
        self.wfile.write(response.getvalue())

    def end_headers(self):
        self.send_header('Access-Control-Allow-Origin', '*')
        BaseHTTPRequestHandler.end_headers(self)

    def do_OPTIONS(self):
        self.send_response(200, "ok")
        self.send_header('Access-Control-Allow-Methods', 'GET, OPTIONS')
        self.send_header("Access-Control-Allow-Headers", "X-Requested-With")
        self.send_header("Access-Control-Allow-Headers", "Content-Type")
        self.end_headers()

httpd = HTTPServer(('localhost', 8879), SimpleHTTPRequestHandler)

try:
    httpd.serve_forever()
    print("Server Start")
except KeyboardInterrupt:
    pass

httpd.server_close()
print("Server stopped.")
0

There are 0 best solutions below