基于Python搭建简易HTTP服务的两种方案

 更新时间:2026年06月08日 08:33:03   作者:曾阿伦  
本描述介绍了两种基于Python的轻量级HTTP服务方案,方案一通过一行命令启动极简文件下载服务,适用于临时文件共享;方案二则支持文件上传下载、预览功能,适合局域网内文件传输需求,需要的朋友可以参考下

一、前言

日常开发、本地文件共享、临时传输场景中,我们需要快速搭建一个轻量HTTP服务,无需部署Nginx、Tomcat等重型服务。Python 提供了零依赖、开箱即用的HTTP服务能力,既可以使用内置模块快速启动静态文件下载服务,也可以自定义代码实现浏览器可视化上传、下载、预览功能。

以下对比使用两种搭建方案:

  • 方案一:一行命令启动静态下载服务(极简、适合临时文件共享)
  • 方案二:自定义Python服务,支持浏览器上传+下载+文件列表预览(全能实用)

所有代码基于Python3.x,无需安装第三方库,原生内置,跨Windows/Linux/Mac系统通用。

二、方案一:一行命令启动极简文件下载服务

2.1 功能说明

使用Python内置http.server模块,快速将本地文件夹转为Web目录,浏览器可直接访问、预览、下载目录下所有文件,仅支持下载,不支持上传,适合临时文件共享。

2.2 启动命令

打开终端,进入需要共享的文件目录,执行对应命令:

Python3 通用命令

# 默认端口8000,监听所有网卡
python -m http.server 8000
# 自定义端口(例如9000)
python -m http.server 9000

2.3 访问方式

  • 本地访问:http://127.0.0.1:8000
  • 局域网访问:http://本机IP:8000(手机/其他电脑可访问)

2.4 优缺点

✅ 优点:零配置、一秒启动、无依赖、跨平台

❌ 缺点:仅支持文件下载/预览,不支持文件上传,无权限控制,仅适合临时使用

三、方案二:自定义HTTP服务

基于Python内置http.servercgi模块二次封装,实现完整功能:浏览器在线查看文件列表、点击下载文件、选择文件上传保存到本地,无需任何第三方依赖。

3.1 服务代码

新建文件 http_file_server.py,复制以下全部代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Python 简易HTTP文件服务
功能:浏览器预览文件列表、文件下载、文件上传
无第三方依赖,Python3原生支持
"""
import os
import cgi
from http.server import BaseHTTPRequestHandler, HTTPServer

# 配置服务端口和文件存储根目录
SERVER_PORT = 8000
# 服务运行目录作为文件根目录
ROOT_DIR = os.getcwd()


class FileServerHandler(BaseHTTPRequestHandler):
    # 忽略日志输出,保持终端干净
    def log_message(self, format, *args):
        return

    # 渲染HTML页面模板
    def render_html(self, title, content):
        html = f"""
        <!DOCTYPE html>
        <html lang="zh-CN">
        <head>
            <meta charset="UTF-8">
            <title>{title}</title>
            <style>
                body {{font-family:微软雅黑; margin:20px;}}
                .box {{border:1px solid #eee; padding:20px; border-radius:8px; margin-bottom:20px;}}
                a {{color:#0066cc; text-decoration:none;}}
                a:hover {{text-decoration:underline;}}
                .file-item {{line-height:2;}}
            </style>
        </head>
        <body>
            <h2>{title}</h2>
            {content}
        </body>
        </html>
        """
        self.send_response(200)
        self.send_header("Content-type", "text/html; charset=utf-8")
        self.end_headers()
        self.wfile.write(html.encode("utf-8"))

    # 展示文件列表 & 上传表单页面
    def do_GET(self):
        # 拼接页面内容
        upload_form = """
        <div class="box">
            <h3>文件上传</h3>
            <form method="post" enctype="multipart/form-data">
                <input type="file" name="upload_file" />
                <button type="submit" style="padding:4px 12px; margin-left:10px;">上传文件</button>
            </form>
        </div>
        """

        # 遍历当前目录文件
        file_list = "<div class='box'><h3>文件列表(点击下载)</h3>"
        for file in os.listdir(ROOT_DIR):
            # 忽略py源码文件(可选,可删除)
            if file.endswith(".py"):
                continue
            file_path = os.path.join(ROOT_DIR, file)
            file_list += f'<div class="file-item"><a href="{file}" rel="external nofollow"  target="_blank">{file}</a></div>'
        file_list += "</div>"

        # 渲染页面
        self.render_html("Python文件上传下载服务", upload_form + file_list)

    # 处理文件上传请求
    def do_POST(self):
        try:
            # 解析上传文件
            form = cgi.FieldStorage(
                fp=self.rfile,
                headers=self.headers,
                environ={"REQUEST_METHOD": "POST"}
            )
            # 获取上传文件对象
            upload_file = form["upload_file"]
            file_name = upload_file.filename

            # 空文件判断
            if not file_name:
                self.render_html("上传失败", "<p>未选择任何文件!</p><a href='/'>返回首页</a>")
                return

            # 写入保存文件
            save_path = os.path.join(ROOT_DIR, file_name)
            with open(save_path, "wb") as f:
                f.write(upload_file.file.read())

            # 上传成功页面
            self.render_html("上传成功", f"<p>文件【{file_name}】上传成功!</p><a href='/'>返回首页</a>")
        except Exception as e:
            self.render_html("上传失败", f"<p>上传异常:{str(e)}</p><a href='/'>返回首页</a>")


if __name__ == "__main__":
    server = HTTPServer(("0.0.0.0", SERVER_PORT), FileServerHandler)
    print(f"✅ 文件服务启动成功")
    print(f"🔗 本地访问:http://127.0.0.1:{SERVER_PORT}")
    print(f"🔗 局域网访问:http://本机IP:{SERVER_PORT}")
    print(f"📂 文件根目录:{ROOT_DIR}")
    print("-" * 50)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        server.server_close()
        print("❌ 服务已关闭")

3.2 启动服务

# 直接运行脚本
python http_file_server.py

3.3 核心功能

  1. 文件预览/下载:浏览器打开页面,自动列出当前目录所有文件,点击文件名直接下载
  2. 文件上传:页面选择本地文件,点击上传,自动保存到服务运行目录
  3. 跨设备访问:支持局域网手机、其他电脑访问上传下载文件
  4. 中文兼容:完美支持中文文件名、中文文件内容

四、服务使用方法

4.1 本地访问

浏览器输入:http://127.0.0.1:8000

4.2 局域网跨设备访问

  1. 查看本机电脑IP(Windows:ipconfig,Linux/Mac:ifconfig
  2. 同局域网设备(手机/其他电脑)访问:http://电脑IP:8000
  3. 无需配置防火墙放行,默认本地局域网可通

4.3 操作方式

  • 下载文件:页面文件列表点击对应文件,浏览器自动下载
  • 上传文件:点击选择文件 → 选中本地文件 → 点击上传,自动保存到服务目录

五、常见问题与注意事项

5.1 端口占用问题

若8000端口被占用,修改代码中 SERVER_PORT 为其他端口(如8080、9000)即可。

5.2 文件保存位置

所有上传的文件会自动保存到脚本运行的目录,可修改 ROOT_DIR 变量自定义存储路径。

5.3 安全说明

该服务为临时工具服务,无账号密码、无权限校验、无加密传输,禁止部署在公网,仅用于本地、局域网临时文件传输。

5.4 兼容性

兼容所有Python3.x版本,支持Windows、Linux、Mac系统,无需pip安装任何依赖。

六、两种方案对比

方案上传功能下载功能部署难度适用场景
方案一不支持支持极低(1秒启动)临时文件下载、静态资源共享
方案二支持支持低(直接运行脚本)局域网双向文件传输、临时上传下载工具

以上就是基于Python搭建简易HTTP服务的两种方案的详细内容,更多关于Python搭建简易HTTP服务的资料请关注脚本之家其它相关文章!

相关文章

  • Ubuntu下使用python读取doc和docx文档的内容方法

    Ubuntu下使用python读取doc和docx文档的内容方法

    今天小编就为大家分享一篇Ubuntu下使用python读取doc和docx文档的内容方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python控制结构的条件判断与循环示例详解

    python控制结构的条件判断与循环示例详解

    这篇文章主要为大家介绍了python控制结构的条件判断与循环示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 一篇文章搞懂python混乱的切换操作与优雅的推导式

    一篇文章搞懂python混乱的切换操作与优雅的推导式

    这篇文章主要给大家介绍了如何通过一篇文章搞懂python混乱的切换操作与优雅的推导式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • 详解Python的hasattr() getattr() setattr() 函数使用方法

    详解Python的hasattr() getattr() setattr() 函数使用方法

    这篇文章主要介绍了详解Python的hasattr() getattr() setattr() 函数使用方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • Python基础教程之if判断,while循环,循环嵌套

    Python基础教程之if判断,while循环,循环嵌套

    这篇文章主要介绍了Python基础教程之if判断,while循环,循环嵌套 的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Python3进行表格数据处理的示例详解

    Python3进行表格数据处理的示例详解

    数据处理是一个当下非常热门的研究方向,通过对于大型实际场景中的数据进行建模,可以用于预测下一阶段可能出现的情况。本文就来聊聊Python3进行表格数据处理的相关操作,需要的可以参考一下
    2023-03-03
  • 一文浅析Python如何构建优雅的异常体系

    一文浅析Python如何构建优雅的异常体系

    这篇文章主要介绍了Python异常处理的核心原则与最佳实践,文内首先指出异常处理常被低估,通过真实案例展示了不当处理带来的隐患,随后解析了Python异常机制的本质是一种控制流信号,并详细介绍了异常层级结构,有需要的小伙伴可以了解下
    2026-03-03
  • Python 3.6.报错 “module ‘enum‘ has no attribute ‘IntFlag‘”的真正原因与解决办法

    Python 3.6.报错 “module ‘enum‘ has no

    这篇文章主要为大家详细介绍了Python 3.6.报错 “module ‘enum‘ has no attribute ‘IntFlag‘”的真正原因与解决办法,文中的示例代码讲解详细,有需要的可以了解下
    2025-11-11
  • pytorch 使用加载训练好的模型做inference

    pytorch 使用加载训练好的模型做inference

    今天小编就为大家分享一篇pytorch 使用加载训练好的模型做inference,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python中的默认编码使用

    python中的默认编码使用

    这篇文章主要介绍了python中的默认编码使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论