杰瑞科技汇

Python内置webserver如何启动与使用?

这是一个非常方便的功能,特别适合于快速开发、测试、共享文件等场景,无需安装任何额外的 Web 服务器软件(如 Apache、Nginx)。

核心要点

  1. 它是什么? Python 内置了一个简单的、纯 Python 编写的 HTTP 服务器,它非常轻量级,功能有限,不适合用于生产环境,但对于本地开发和临时任务来说非常强大。

  2. 如何启动? 你只需要在命令行中使用 Python 的 -m 标志来运行 http.server 模块即可。

    # Python 3
    python -m http.server [端口号]
    # 如果你的系统默认是 Python 2
    # python -m SimpleHTTPServer [端口号]
    • [端口号] 是可选的,如果不指定,默认使用 8000 端口。
    • 服务器启动后,它会监听你指定的端口,等待客户端连接。
  3. 它在哪里运行? 服务器会在你当前所在的命令行目录下启动,这个目录被称为“根目录”或“文档根”(Document Root),所有通过这个服务器提供的文件,都相对于这个目录。


详细使用指南

基本用法:共享本地文件

这是最常见的用法,比如你想快速和同事分享一个文件夹里的文件。

步骤:

  1. 准备一个文件夹 假设你有一个名为 my_project 的文件夹,里面有一些文件。

    my_project/
    ├── index.html
    ├── styles.css
    └── script.js
  2. 打开终端,进入该文件夹 使用 cd 命令切换到 my_project 目录。

    # macOS / Linux
    cd /path/to/my_project
    # Windows
    cd C:\Users\YourUser\Documents\my_project
  3. 启动 Web 服务器 在该目录下运行以下命令:

    # 使用 Python 3,默认端口 8000
    python -m http.server

    你会看到类似下面的输出,表示服务器已成功启动:

    Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
  4. 访问服务器

    • 在同一台电脑上访问:打开你的网页浏览器,在地址栏输入 http://localhost:8000http://127.0.0.1:8000,然后按回车。
    • 从同一局域网内的其他设备访问:找到你电脑的 IP 地址(在 macOS/Linux 上用 ifconfig,在 Windows 上用 ipconfig),假设你的 IP 是 168.1.10,那么其他设备就可以通过 http://192.168.1.10:8000 来访问你共享的文件。
  5. 停止服务器 在运行服务器的终端窗口中,按 Ctrl + C 即可停止服务器。

指定端口

8000 端口被占用,或者你想使用其他端口,可以轻松指定:

# 在 8080 端口启动服务器
python -m http.server 8080

指定绑定地址

默认情况下,服务器绑定到 0.0.0,这意味着它接受来自任何网络接口(包括本地 localhost 和局域网内其他 IP)的连接,如果你只想从本机访问,可以绑定到 0.0.1

这可以通过环境变量 PYTHONHTTPSERVERSERVER_BIND_ADDRESS 来设置(Python 3.7+)。

在启动前设置环境变量

# Linux / macOS
export PYTHONHTTPSERVERSERVER_BIND_ADDRESS=127.0.0.1
python -m http.server
# Windows (Command Prompt)
set PYTHONHTTPSERVERSERVER_BIND_ADDRESS=127.0.0.1
python -m http.server
# Windows (PowerShell)
$env:PYTHONHTTPSERVERSERVER_BIND_ADDRESS="127.0.0.1"
python -m http.server

直接在命令行设置(Python 3.10+)

python -m http.server --bind 127.0.0.1

自定义目录索引

默认情况下,如果访问一个目录,服务器会生成一个包含该目录下所有文件的列表,你可以通过创建一个名为 index.htmlindex.htmindex.cgi 的文件来覆盖这个行为,当用户访问该目录时,服务器会优先显示你自定义的 index.html 文件。


高级用法与选项

处理 POST 请求(上传文件)

默认的 http.server 模块不能处理 POST 请求,Python 的标准库中有一个更强大的模块 http.server 的子模块 cgi(Common Gateway Interface),可以让你实现一个简单的文件上传功能。

这是一个稍微复杂的例子,展示了如何创建一个可以接收文件上传的表单。

步骤:

  1. 创建一个用于上传的 HTML 文件 (upload.html)

    <!DOCTYPE html>
    <html>
    <head>
        <title>File Upload</title>
    </head>
    <body>
        <h1>Upload a file</h1>
        <form action="/upload" method="post" enctype="multipart/form-data">
            <input type="file" name="file">
            <input type="submit" value="Upload">
        </form>
    </body>
    </html>
  2. 创建一个 CGI 脚本 (upload.cgi)

    这个脚本会处理表单提交的数据。

    # upload.cgi
    # 确保这个文件有可执行权限 (chmod +x upload.cgi)
    import cgi
    import os
    import shutil
    # 设置保存上传文件的目录
    UPLOAD_DIR = "uploads"
    # 确保上传目录存在
    if not os.path.exists(UPLOAD_DIR):
        os.makedirs(UPLOAD_DIR)
    # 打印 HTTP 头部,必须以两个换行符结束
    print("Content-Type: text/html")
    print()
    # 处理文件上传
    try:
        form = cgi.FieldStorage()
        fileitem = form['file']
        if fileitem.filename:
            # 获取文件名并清理路径
            filename = os.path.basename(fileitem.filename)
            # 保存文件
            filepath = os.path.join(UPLOAD_DIR, filename)
            with open(filepath, 'wb') as f:
                shutil.copyfileobj(fileitem.file, f)
            print(f"<p>File '{filename}' uploaded successfully.</p>")
        else:
            print("<p>No file was uploaded.</p>")
    except Exception as e:
        print(f"<p>Error: {e}</p>")
  3. 启动 CGI 服务器

    你需要使用 CGIHTTPRequestHandler 而不是默认的 HTTPRequestHandler

    # 在包含 upload.html 和 upload.cgi 的目录下运行
    python -m http.server --cgi 8000

    访问 http://localhost:8000/upload.html,你就可以通过这个网页上传文件了,上传的文件会被保存在 uploads 子目录中。


重要注意事项

  • 安全性绝对不要将这个内置服务器暴露在公共互联网上!因为它没有任何身份验证、访问控制或安全加固,任何人只要知道你的 IP 地址和端口,就可以访问你电脑上指定目录下的所有文件,并尝试执行恶意脚本(如果目录下有 .py 文件),它仅适用于受信任的网络环境(如本地局域网)。
  • 性能:这个服务器是为单线程、低负载设计的,它不适合处理大量并发请求或作为生产环境的服务器。
  • 功能限制:它不支持 HTTPS(加密连接)、URL 重写、虚拟主机等高级 Web 服务器功能。
功能 命令/方法 描述
基本启动 python -m http.server 在当前目录启动,监听 8000 端口
指定端口 python -m http.server 8080 在 8080 端口启动服务器
仅本机访问 python -m http.server --bind 127.0.0.1 (Python 3.10+) 只允许本地访问
文件上传 python -m http.server --cgi 启用 CGI 支持,可处理 POST 请求
停止服务 Ctrl + C 在终端中按下组合键

Python 的内置 Web 服务器是一个“瑞士军刀”,虽然小巧,但在很多紧急或临时的场合都能派上大用场,是每个 Python 开发者都应该掌握的实用工具。

分享:
扫描分享到社交APP
上一篇
下一篇