news 2026/4/23 20:49:49

Python 内置的 HTTP 服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 内置的 HTTP 服务

Python 内置的 HTTP 服务

文章目录

  • Python 内置的 HTTP 服务
      • 1. 最简单的方式:命令行一键启动
        • Python 3
        • Python 2
      • 2. 在 Python 脚本中启动
      • 3. 高级用法:自定义处理器 (Handler)
      • 适用场景与注意事项
        • 适用场景
        • 注意事项(非常重要!)
      • 总结

Python 内置的 HTTP 服务,这是一个非常方便的功能,尤其适合快速共享文件、本地开发和简单的 API 测试。

Python 启动 HTTP 服务主要依赖http.server模块(在 Python 3 中)或SimpleHTTPServer模块(在 Python 2 中)。

我们将主要以更现代的Python 3为例进行讲解。


1. 最简单的方式:命令行一键启动

这是最常用、最快捷的用法,无需编写任何 Python 代码。它会把你当前所在的目录作为网站根目录,启动一个文件服务器。

Python 3

打开你的终端(或 Windows 的 CMD/PowerShell),进入你想要共享的文件夹,然后运行:

# 默认使用 8000 端口python -m http.server# 你也可以指定一个端口,比如 8888python -m http.server8888# 如果你想让局域网内的其他设备也能访问,可以绑定到 0.0.0.0python -m http.server --bind0.0.0.08888

启动后,你会看到类似Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...的提示。

现在,打开浏览器访问:

  • 本机访问:http://localhost:8000http://127.0.0.1:8000
  • 局域网其他设备访问:http://<你的电脑IP地址>:8000

你会在浏览器上看到当前目录的文件和文件夹列表,可以点击下载。

Python 2

如果你仍在使用 Python 2,命令稍有不同:

# 默认使用 8000 端口python -m SimpleHTTPServer# 指定端口 8888python -m SimpleHTTPServer8888

2. 在 Python 脚本中启动

如果你需要更多的控制,或者想把 HTTP 服务嵌入到你的应用程序中,可以在 Python 脚本中启动它。

这是一个基本的脚本,功能和命令行版本完全一样。

importhttp.serverimportsocketserver# 定义端口号PORT=8000# 创建一个简单的请求处理器,SimpleHTTPRequestHandler 会处理 GET 和 HEAD 请求,# 并将当前目录下的文件作为响应。Handler=http.server.SimpleHTTPRequestHandler# 使用 with 语句可以确保服务器在程序结束时被正确关闭withsocketserver.TCPServer(("",PORT),Handler)ashttpd:print(f"服务器正在运行,端口号为:{PORT}")print(f"请在浏览器中访问 http://localhost:{PORT}")# 启动服务器,它会一直运行,直到你手动停止(例如按 Ctrl+C)try:httpd.serve_forever()exceptKeyboardInterrupt:print("\n服务器正在关闭...")httpd.server_close()

如何运行:

  1. 将以上代码保存为my_server.py
  2. 在终端中运行python my_server.py
  3. 效果和命令行方式一样。

3. 高级用法:自定义处理器 (Handler)

http.server最强大的地方在于你可以自定义如何处理请求。默认的SimpleHTTPRequestHandler只能提供文件服务,但我们可以通过继承BaseHTTPRequestHandler来编写自己的逻辑。

例如,创建一个简单的 API,当访问/api时返回一个 JSON 数据。

importhttp.serverimportjson# 定义主机和端口HOST="localhost"PORT=8000# 自定义请求处理器类,继承自 BaseHTTPRequestHandlerclassMyAPIHandler(http.server.BaseHTTPRequestHandler):# 处理 GET 请求defdo_GET(self):# 路由:根据请求的路径 (self.path) 决定做什么ifself.path=='/':# 如果是根路径,就返回一个欢迎页面self.send_response(200)self.send_header('Content-type','text/html; charset=utf-8')self.end_headers()message="<h1>欢迎来到我的自定义服务器!</h1><p>尝试访问 <a href='/api'>/api</a></p>"self.wfile.write(message.encode('utf-8'))elifself.path=='/api':# 如果是 /api 路径,就返回一个 JSON 数据self.send_response(200)self.send_header('Content-type','application/json')self.end_headers()# 准备要返回的 JSON 数据response_data={'status':'success','message':'Hello from the API!','data':[1,2,3]}# 将 Python 字典转换为 JSON 字符串,并编码为字节流self.wfile.write(json.dumps(response_data).encode('utf-8'))else:# 如果路径未找到,返回 404self.send_error(404,"页面未找到 (Page Not Found)")# --- 启动服务器的代码 ---if__name__=="__main__":# 创建一个 TCP 服务器实例,绑定地址和自定义的处理器server=http.server.TCPServer((HOST,PORT),MyAPIHandler)print(f"服务器启动于 http://{HOST}:{PORT}")try:# 启动服务器,永久运行server.serve_forever()exceptKeyboardInterrupt:print("\n服务器正在关闭...")server.server_close()print("服务器已关闭。")

如何运行和测试:

  1. 保存为api_server.py并运行python api_server.py
  2. 访问http://localhost:8000/会看到欢迎信息。
  3. 访问http://localhost:8000/api会看到 JSON 响应。
  4. 访问http://localhost:8000/other会得到 404 错误。

适用场景与注意事项

适用场景
  1. 快速文件共享:在局域网内临时共享文件给同事或自己的其他设备,非常方便。
  2. 本地 Web 开发:在没有后端框架的情况下,快速预览 HTML/CSS/JavaScript 静态页面。
  3. 简单的 API 原型/Mock:为前端开发提供临时的、可用的 API 接口。
  4. 教学与演示:简单明了地展示 HTTP 协议的基本工作原理。
注意事项(非常重要!)
  1. 单线程http.server默认是单线程的,一次只能处理一个请求。如果一个请求耗时很长,其他请求必须排队等待。
  2. 性能问题:它的性能远不如专业的 Web 服务器(如 Nginx, Apache)或 Web 框架(如 Flask, Django, FastAPI)。
  3. 安全风险:它是一个纯 HTTP 服务器,不处理 HTTPS。同时,它没有任何安全加固,将整个目录暴露在网络上可能存在风险。绝对不要在生产环境或不受信任的网络上使用它!
  4. 功能有限:它没有路由、模板引擎、数据库集成等高级功能。对于复杂的应用,你应该选择 Flask、Django 或 FastAPI 等专业框架。

总结

用途Python 3 命令Python 2 命令特点
快速文件服务python -m http.server [端口]python -m SimpleHTTPServer [端口]简单快捷,一键启动,适合临时使用
脚本化服务http.server+socketserverSimpleHTTPServer+SocketServer可编程,能集成到其他应用中
自定义API继承http.server.BaseHTTPRequestHandler继承SimpleHTTPServer.SimpleHTTPRequestHandler灵活,可完全控制请求和响应的逻辑
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 16:13:30

Feishin音乐播放器完整使用指南:从安装到个性化播放体验

Feishin音乐播放器完整使用指南&#xff1a;从安装到个性化播放体验 【免费下载链接】feishin A modern self-hosted music player. 项目地址: https://gitcode.com/gh_mirrors/fe/feishin Feishin是一款现代化的自托管音乐播放器&#xff0c;让用户能够完全掌控自己的音…

作者头像 李华
网站建设 2026/4/23 19:24:19

OctoSQL查询计划可视化:解锁SQL性能优化的终极指南

OctoSQL查询计划可视化&#xff1a;解锁SQL性能优化的终极指南 【免费下载链接】octosql octosql&#xff1a;这是一个SQL查询引擎&#xff0c;它允许您对存储在多个SQL数据库、NoSQL数据库和各种格式的文件中的数据编写标准SQL查询&#xff0c;尝试将尽可能多的工作压缩到源数…

作者头像 李华
网站建设 2026/4/23 14:45:38

Qwen3-235B-A22B:重新定义下一代混合专家语言模型架构

Qwen3-235B-A22B&#xff1a;重新定义下一代混合专家语言模型架构 【免费下载链接】Qwen3-235B-A22B-MLX-8bit 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-235B-A22B-MLX-8bit 在人工智能语言模型技术快速演进的当下&#xff0c;阿里通义实验室推出的Qwe…

作者头像 李华
网站建设 2026/4/23 14:45:37

CellProfiler终极指南:生物图像分析从入门到精通的高效实战技巧

在当今生物医学研究领域&#xff0c;生物图像分析已经成为不可或缺的核心技术。面对海量的显微镜图像数据&#xff0c;传统的手工分析方法效率低下且容易出错。CellProfiler作为一款专业的开源细胞识别与图像处理工具&#xff0c;为研究人员提供了强大的自动化分析能力&#xf…

作者头像 李华
网站建设 2026/4/23 14:16:20

AI辅助气象预报:精确度与可靠性的提升

AI辅助气象预报&#xff1a;精确度与可靠性的提升 关键词&#xff1a;AI&#xff0c;气象预报&#xff0c;精确度&#xff0c;可靠性&#xff0c;机器学习&#xff0c;深度学习 摘要&#xff1a;本文围绕AI辅助气象预报在提升精确度与可靠性方面展开深入探讨。首先介绍了气象预…

作者头像 李华