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服务器的方法。你可以根据需要在处理器类中编写其他的请求处理逻辑。
