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

Python中http.server.BaseHTTPRequestHandler的基本用法和示例

发布时间:2024-01-04 18:00:17

BaseHTTPRequestHandler 是 Python 内置的一个 HTTP 服务器处理请求的基类。它继承自 socketserver.BaseRequestHandler,用于处理来自客户端的 HTTP 请求,并生成相应的 HTTP 响应。

使用 BaseHTTPRequestHandler 基本分为以下几个步骤:

1. 创建自定义的处理器类,继承 BaseHTTPRequestHandler,并重写 do_GET()、do_POST() 等方法来处理对应的请求方法。

2. 创建 HTTP 服务器实例,指定监听的地址和端口,并指定处理器类。

3. 启动 HTTP 服务器。

下面是一个简单的示例:

from http.server import BaseHTTPRequestHandler, HTTPServer

# 自定义处理器类
class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 设置响应状态码为 200
        self.send_response(200)
        
        # 设置响应头部
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        
        # 构造响应内容
        response = "Hello, world!"
        
        # 发送响应内容
        self.wfile.write(response.encode())
        
    def do_POST(self):
        # 设置响应状态码为 200
        self.send_response(200)
        
        # 设置响应头部
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        
        # 获取请求内容
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        
        # 构造响应内容
        response = "Received: {}".format(post_data.decode())
        
        # 发送响应内容
        self.wfile.write(response.encode())

def main():
    # 创建 HTTP 服务器实例
    server = HTTPServer(('localhost', 8000), MyHandler)
    
    # 启动 HTTP 服务器,直到终止进程
    server.serve_forever()

if __name__ == "__main__":
    main()

在上述示例中,自定义的处理器类 MyHandler 继承自 BaseHTTPRequestHandler,并重写了 do_GET() 和 do_POST() 方法来处理对应的 GET 和 POST 请求。

对于 GET 请求,我们设置了响应的状态码为 200,并在响应头部设置了 Content-type 为 text/html。然后构造了响应内容为 "Hello, world!",并通过 self.wfile.write() 方法发送响应。

对于 POST 请求,我们同样设置了响应的状态码和头部。然后通过 self.headers['Content-Length'] 来获取 POST 请求的内容长度,并读取该长度的数据。最后构造了响应内容为 "Received: {post_data}",并发送响应。

在 main() 函数中,我们创建了一个 HTTP 服务器实例,设置监听地址为 'localhost',端口为 8000,并指定处理器类为 MyHandler。然后通过 server.serve_forever() 方法启动 HTTP 服务器,使其一直运行,直到终止进程。

要运行此示例,只需执行 python 文件名.py 命令即可。然后打开浏览器,访问 http://localhost:8000,即可看到 "Hello, world!" 的文字响应。