http_server
本地 HTTP 文件服务器。
本地 HTTP 文件服务器:在 127.0.0.1 上提供 Documents(或指定目录)的静态文件访问。
边界:仅监听本机回环地址,供同设备上的浏览器或其他客户端读取文件。不是公网服务器;远程访问请用 ssh 或 network。start()/stop()放在按钮回调,离开页面前应stop()。
#模块概览
| 项 | 说明 |
|---|---|
| 导入 | import http_server |
| 适合做什么 | 临时共享工作区文件、本地调试静态资源、给其他 App 读文件 |
| 调用时机 | 用户点击启动;页面关闭或切换时停止 |
| 推荐顺序 | start() 拿 URL → status() 确认 → 访问文件 → stop() |
| 根目录 | 默认 App Documents;可用 root_dir 指定 |
#快速开始
下面脚本在 18080 端口启动服务、查看状态并停止:
已复制
import http_server
try:
url = http_server.start(port=18080)
print("服务地址:", url)
print(http_server.status())
finally:
http_server.stop()
访问 http://127.0.0.1:18080/你的文件名 可读取 root_dir 下的文件;根路径 / 返回 JSON 提示。
#AppUI 示例
启动/停止放在按钮回调;状态展示当前 URL 与根目录。
已复制
import appui
import http_server
state = appui.State(
running=False,
url="—",
port="—",
root="—",
status="点击启动本地服务",
)
def refresh_status():
try:
st = http_server.status() or {}
state.batch_update(
running=bool(st.get("running")),
url=st.get("url") or "—",
port=str(st.get("port", "—")),
root=st.get("root_dir") or "—",
)
except http_server.HttpServerError as exc:
state.status = f"查询失败: {exc}"
def start_server():
try:
url = http_server.start(port=18080)
refresh_status()
state.status = f"已启动: {url}"
except http_server.HttpServerError as exc:
state.status = f"启动失败: {exc}"
def stop_server():
try:
http_server.stop()
state.batch_update(
running=False,
url="—",
port="—",
status="已停止",
)
refresh_status()
except http_server.HttpServerError as exc:
state.status = f"停止失败: {exc}"
def body():
label = "停止服务" if state.running else "启动服务"
return appui.NavigationStack(
appui.Form([
appui.Section("服务状态", [
appui.LabeledContent("运行中", value="是" if state.running else "否"),
appui.LabeledContent("地址", value=state.url),
appui.LabeledContent("端口", value=state.port),
appui.LabeledContent("根目录", value=state.root),
]),
appui.Section("操作", [
appui.Button(label, action=stop_server if state.running else start_server)
.button_style("bordered_prominent"),
appui.Button("刷新状态", action=refresh_status),
appui.Text(state.status).foreground_color("secondaryLabel"),
], footer="仅本机 127.0.0.1;把文件放进根目录后通过 URL 访问。"),
]).navigation_title("HTTP 服务")
)
appui.run(body, state=state)
#API 参考
#速查
| API | 作用 |
|---|---|
start(port, root_dir) | 启动服务 → 访问 URL |
stop() | 停止服务 |
status() | {running, port, url, root_dir} |
HttpServerError | 操作失败时抛出 |
#start
start(port=8080, root_dir=None)
已复制
url = http_server.start()
url = http_server.start(port=18080, root_dir="/path/to/folder")
| 参数 | 说明 |
|---|---|
port | 监听端口(默认 8080) |
root_dir | 文件根目录;省略时用 Documents |
返回形如 http://127.0.0.1:8080/ 的 URL。若端口已被占用或无效会抛出 HttpServerError。
#stop / status
stop() — 关闭监听器。
status() 返回:
| 字段 | 说明 |
|---|---|
running | 是否正在服务 |
port | 当前端口 |
url | 访问地址(未运行时为空) |
root_dir | 文件根目录 |
#访问规则
GET /→ JSON 提示{"ok":true,"message":"PythonIDE http_server"}GET /filename→ 读取root_dir/filename的二进制内容- 简单 HTTP/1.1,单次请求后关闭连接
#常见错误
| 错误写法 | 后果 | 修正 |
|---|---|---|
在 body() 里 start() | 刷新时重复启动 | 放进按钮回调 |
页面离开不 stop() | 端口占用、耗电 | 停止按钮或退出时清理 |
| 端口被占用 | 启动失败 | 换端口或先 stop() |
| 期望公网访问 | 仅本机回环 | 用 SSH 隧道或其他方案 |
#相关文档
| 文档 | 用途 |
|---|---|
| network | HTTP 客户端下载 |
| background_download | 后台大文件下载 |
| ssh | 远程文件传输 |
| storage | 记录服务端口等配置 |
#预期效果
运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。