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, BaseHTTPRequestHandler
class 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 ThreadingMixIn
class ThreadingHTTPServer(ThreadingMixIn, HTTPServer): daemon_threads = True
server = ThreadingHTTPServer(("0.0.0.0", 8000), SimpleHTTPRequestHandler)print("Serving at http://0.0.0.0:8000")server.serve_forever()
说明:
本示例支持多人或多个浏览器同时访问时,服务器能并发响应,不会因某一个请求阻塞其他请求。
在浏览器中输入:
http://localhost:8000/
或使用同一局域网中的设备访问:
http://<你电脑的IP>:8000/
例 4:添加 POST 请求处理(基础表单接收)
from http.server import BaseHTTPRequestHandler, HTTPServer
class 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"<h1>Hello, mediaTEA!</h1>") # 响应正文(必须是字节串)
# 创建 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, HTTPServer
class 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 调用,可将其集成到自动化测试流程中。
“点赞有美意,赞赏是鼓励”