PythonIDE Docs
中文
简体中文

http_server

本地 HTTP 文件服务器。

本地 HTTP 文件服务器:在 127.0.0.1 上提供 Documents(或指定目录)的静态文件访问。

边界:仅监听本机回环地址,供同设备上的浏览器或其他客户端读取文件。不是公网服务器;远程访问请用 sshnetworkstart() / stop() 放在按钮回调,离开页面前应 stop()

#模块概览

说明
导入import http_server
适合做什么临时共享工作区文件、本地调试静态资源、给其他 App 读文件
调用时机用户点击启动;页面关闭或切换时停止
推荐顺序start() 拿 URL → status() 确认 → 访问文件 → stop()
根目录默认 App Documents;可用 root_dir 指定

#快速开始

下面脚本在 18080 端口启动服务、查看状态并停止:

python
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 与根目录。

python
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)

python
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 隧道或其他方案

#相关文档

文档用途
networkHTTP 客户端下载
background_download后台大文件下载
ssh远程文件传输
storage记录服务端口等配置

#预期效果

运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。