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

使用Python中的http.server.BaseHTTPRequestHandler创建简单的WEB服务器

发布时间:2024-01-04 18:02:57

在Python中,可以使用http.server.BaseHTTPRequestHandler类来创建简单的WEB服务器。BaseHTTPRequestHandler是一个Python内置的HTTP请求处理器类,它可以被继承以创建自定义的请求处理器类。下面是一个简单的使用BaseHTTPRequestHandler创建WEB服务器的例子:

from http.server import BaseHTTPRequestHandler, HTTPServer

# 自定义的请求处理器类继承自BaseHTTPRequestHandler
class MyRequestHandler(BaseHTTPRequestHandler):
    
    # 处理GET请求
    def do_GET(self):
        # 设置响应状态码为200(表示成功)
        self.send_response(200)
        
        # 设置响应头
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        
        # 构造响应内容
        response = "<h1>Hello, World!</h1>"
        
        # 发送响应内容
        self.wfile.write(response.encode())
        
    # 处理POST请求
    def do_POST(self):
        # 获取POST请求的数据内容
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length).decode('utf-8')
        
        # 设置响应状态码为200
        self.send_response(200)
        
        # 设置响应头
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        
        # 构造响应内容
        response = f"<h1>POST data: {post_data}</h1>"
        
        # 发送响应内容
        self.wfile.write(response.encode())

# 创建HTTP服务器并指定请求处理器类
server_address = ('', 8000)
httpd = HTTPServer(server_address, MyRequestHandler)

# 启动服务器
print('Starting server...')
httpd.serve_forever()

在上述例子中,我们创建了一个自定义的请求处理器类MyRequestHandler,它继承自BaseHTTPRequestHandler。在MyRequestHandler中,我们重写了do_GETdo_POST方法来处理GET和POST请求。当收到GET请求时,服务器会返回一个HTML标题为"Hello, World!"的响应,当收到POST请求时,服务器会返回POST请求的数据内容。

然后,我们创建了一个HTTP服务器实例,并指定服务器地址为('', 8000),这里表示将服务器绑定到本地IP地址的8000端口上。最后调用serve_forever()方法启动服务器。

在运行上述代码后,可以在浏览器中访问http://localhost:8000来测试GET请求,或使用curl命令来测试POST请求:

$ curl -X POST -d "name=John&age=25" http://localhost:8000

可以看到服务器返回的响应内容。这就是一个简单的使用http.server.BaseHTTPRequestHandler创建的WEB服务器的例子。