欢迎访问宙启技术站
智能推送

Python中使用http.server.HTTPServer模块搭建基本的HTTPS服务器

发布时间:2024-01-09 20:50:38

要在Python中搭建一个基本的HTTPS服务器,可以使用http.server模块中的HTTPServer类。以下是使用例子和说明。

1. 导入所需的模块

import http.server
import socketserver
import ssl

2. 定义一个处理器类

class MyHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write(bytes("Hello, World!", "utf8"))

3. 定义一个HTTPS服务器类

class MyHTTPSServer(socketserver.TCPServer):
    def __init__(self, server_address, RequestHandlerClass):
        super().__init__(server_address, RequestHandlerClass)
        self.socket = ssl.wrap_socket(self.socket, certfile="server.crt", keyfile="server.key")

使用ssl.wrap_socket函数对socket进行包装,使用"server.crt"和"server.key"指定SSL证书和私钥的路径。

4. 创建HTTPS服务器实例并启动

server_address = ("localhost", 8000)
httpd = MyHTTPSServer(server_address, MyHTTPRequestHandler)
httpd.serve_forever()

完整的示例代码如下:

import http.server
import socketserver
import ssl

class MyHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write(bytes("Hello, World!", "utf8"))

class MyHTTPSServer(socketserver.TCPServer):
    def __init__(self, server_address, RequestHandlerClass):
        super().__init__(server_address, RequestHandlerClass)
        self.socket = ssl.wrap_socket(self.socket, certfile="server.crt", keyfile="server.key")

server_address = ("localhost", 8000)
httpd = MyHTTPSServer(server_address, MyHTTPRequestHandler)
httpd.serve_forever()

在运行这个代码之前,你需要确保已经生成了一个SSL证书和私钥,并将其保存为"server.crt"和"server.key"。

运行代码后,浏览器访问"https://localhost:8000",就可以看到"Hello, World!"的消息。

这就是使用http.server.HTTPServer模块搭建基本的HTTPS服务器的方法。你可以根据需要在处理器类中编写其他的请求处理逻辑。