You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3使用http.server时如何将handle_request()处理的请求保存为变量

Python3 http.server捕获请求到变量实现方案

默认SimpleHTTPRequestHandler处理请求后不会将请求内容返回给外层,你需要自定义请求处理类,将请求信息绑定到HTTPServer实例上再读取,具体实现如下:

完整代码示例

from http.server import HTTPServer, SimpleHTTPRequestHandler

# 自定义请求处理类
class CaptureRequestHandler(SimpleHTTPRequestHandler):
    # 处理GET请求
    def do_GET(self):
        # 组装请求信息,按需增减字段
        request_info = {
            "method": self.command,
            "path": self.path,
            "protocol": self.request_version,
            "headers": dict(self.headers),
            "client_addr": self.client_address
        }
        # 将请求信息绑定到server实例属性
        self.server.captured_request = request_info

        # 可选:给客户端返回正常响应,不需要可删除
        self.send_response(200)
        self.send_header("Content-Type", "text/plain;charset=utf-8")
        self.end_headers()
        self.wfile.write("请求已捕获".encode("utf-8"))

    # 处理POST请求,需要其他方法同理添加
    def do_POST(self):
        # 读取请求体
        content_len = int(self.headers.get("Content-Length", 0))
        request_body = self.rfile.read(content_len)
        # 组装请求信息
        request_info = {
            "method": self.command,
            "path": self.path,
            "protocol": self.request_version,
            "headers": dict(self.headers),
            "client_addr": self.client_address,
            "body": request_body
        }
        self.server.captured_request = request_info

        # 可选:返回响应
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b"ok")

if __name__ == "__main__":
    # 初始化服务
    httpd = HTTPServer(("127.0.0.1", 8000), CaptureRequestHandler)
    # 初始化存储请求的属性
    httpd.captured_request = None

    # 处理一次请求后自动停止
    httpd.handle_request()

    # 读取捕获到的请求变量
    request_variable = httpd.captured_request
    # 后续可直接解析request_variable
    print(request_variable)

说明

  • 如果不需要给请求方返回响应,可以删除对应方法里构造响应的代码,客户端会收到连接断开提示
  • 可以按需调整request_info里存储的字段,比如要获取原始请求行、请求体解码后的内容等都可以直接从handler的属性里读取
  • 要支持PUT/DELETE等其他HTTP方法,只需对应添加do_PUT/do_DELETE方法,逻辑和GET/POST一致

内容的提问来源于stack exchange,提问作者Stathis Kapnidis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:57:04