Python 库手册:http.server 轻量级 HTTP 服务器模块
http.server 是 Python 标准库中用于搭建轻量级 HTTP 服务器的模块。它内置于 Python 中,无需额外安装,适用于快速测试网页、共享本地文件或进行基本的 Web 服务调试。
常见应用场景:
(1)本地目录共享:快速在局域网中共享文件。
(2) Web 页面调试:无需安装 Web 框架即可测试 HTML/JS/CSS。
(3)前端静态页面部署演示。
(4)模拟服务接口进行后端联调。
(5)Python 网络编程教学实践。
◆ ◆ ◆
核心概念
1、HTTPServer
基于 socketserver.TCPServer 的 HTTP 服务类,用于监听请求并分发处理。
2、BaseHTTPRequestHandler
所有请求处理类的基类,定义了如何响应 GET、POST、HEAD 等请求。
3、SimpleHTTPRequestHandler
处理 GET 和 HEAD 请求,自动提供静态目录浏览与文件下载功能。
4、命令行运行方式
使用 python -m http.server 快速启动服务,无需编程。
5、wfile / rfile
客户端通信的输出 / 输入流对象,用于读取请求数据和写入响应数据。
◆ ◆ ◆
应用举例
例 1:命令行快速启动本地 HTTP 文件服务
# 启动本地 HTTP 服务(默认端口 8000)python -m http.server# 指定端口与目录python -m http.server 8888 --directory ./public
例 2:自定义 GET 请求处理
from http.server import HTTPServer, BaseHTTPRequestHandlerclass MyHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header(\"Content-type\", \"text/plain; charset=utf-8\") self.end_headers() self.wfile.write(b\"Hello from Python HTTP server!\")server = HTTPServer((\"localhost\", 8080), MyHandler)server.serve_forever()
例 3:启用多线程处理(适合并发调试)
from http.server import HTTPServer, SimpleHTTPRequestHandlerfrom socketserver import ThreadingMixInclass ThreadingHTTPServer(ThreadingMixIn, HTTPServer): daemon_threads = Trueserver = ThreadingHTTPServer((\"0.0.0.0\", 8000), SimpleHTTPRequestHandler)print(\"Serving at http://0.0.0.0:8000\")server.serve_forever()
说明:
本示例支持多人或多个浏览器同时访问时,服务器能并发响应,不会因某一个请求阻塞其他请求。
在浏览器中输入:
http://localhost:8000/
或使用同一局域网中的设备访问:
http://:8000/
例 4:添加 POST 请求处理(基础表单接收)
from http.server import BaseHTTPRequestHandler, HTTPServerclass MyHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) # 返回状态码 200(成功) self.send_header(\"Content-type\", \"text/html\") # 设置 Content-Type 响应头 self.end_headers() # 响应头结束 self.wfile.write(b\"Hello, mediaTEA!
\") # 响应正文(必须是字节串)# 创建 HTTP 服务器,绑定地址为 localhost:8000server = HTTPServer((\"localhost\", 8000), MyHandler)print(\"Custom HTTP server running at http://localhost:8000\")# 启动服务器(阻塞主线程)server.serve_forever()
例 5:返回 JSON 响应(接口调试模拟)
import jsonfrom http.server import BaseHTTPRequestHandler, HTTPServerclass JsonHandler(BaseHTTPRequestHandler): def do_GET(self): data = {\"status\": \"ok\", \"message\": \"This is JSON\"} self.send_response(200) self.send_header(\"Content-type\", \"application/json\") self.end_headers() self.wfile.write(json.dumps(data).encode(\"utf-8\"))server = HTTPServer((\"localhost\", 8001), JsonHandler)server.serve_forever()
◆ ◆ ◆
常用函数速览
BaseHTTPRequestHandler.end_headers()
结束响应头的发送,准备发送正文。
参数:无
返回:无
BaseHTTPRequestHandler.send_header(key, value)
发送一条 HTTP 响应头。
参数:
key:字符串,头字段名,如 \"Content-type\"
value:字符串,字段值,如 \"text/html\"
返回:无
BaseHTTPRequestHandler.send_response(code, message=None)
发送状态码与可选的状态描述。
参数:
code:整数,HTTP 状态码(如 200、404)
message:字符串,可选状态说明
返回:无
HTTPServer(address, handler)
创建 HTTP 服务器。
参数:
address:元组 (host, port)
handler:处理类(继承自 BaseHTTPRequestHandler)
返回:HTTPServer 实例
HTTPServer.serve_forever()
持续运行服务器并响应请求。
参数:无
返回:无(阻塞运行)
wfile.write(data)
发送响应体(二进制数据)。
参数:
data:字节串(需用 b\"...\" 格式)
返回:写入的字节数
◆ ◆ ◆
补充说明
1、默认使用的是单线程服务,在并发测试中可能会阻塞。可通过 socketserver.ThreadingMixIn 实现多线程。
2、该模块仅处理静态内容,不具备路由、模板、认证等功能。
3、可通过重写 do_GET()、do_POST() 等方法自定义请求行为。
4、配合 subprocess 调用,可将其集成到自动化测试流程中。
“点赞有美意,赞赏是鼓励”