Python 库手册:http.server 轻量级 HTTP 服务器模块

发布于:2025-07-26 ⋅ 阅读:(11) ⋅ 点赞:(0)

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 调用,可将其集成到自动化测试流程中。

图片

“点赞有美意,赞赏是鼓励”


网站公告

今日签到

点亮在社区的每一天
去签到