张掖市网站建设_网站建设公司_门户网站_seo优化
2025/12/17 17:48:43 网站建设 项目流程

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灵活,可完全控制请求和响应的逻辑

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询