凌峰创科服务平台

Python如何快速搭建简单HTTP服务器?

下面我将从最简单的方法开始,逐步介绍更高级和更现代的替代方案。

Python如何快速搭建简单HTTP服务器?-图1
(图片来源网络,侵删)

使用 http.server (最简单、最常用)

这是 Python 标准库的一部分,无需安装任何额外的包。

最简单的用法:启动一个静态文件服务器

这个命令会启动一个服务器,监听当前目录,并允许通过浏览器访问该目录下的文件。

步骤:

  1. 打开你的终端(或命令提示符)。

    Python如何快速搭建简单HTTP服务器?-图2
    (图片来源网络,侵删)
  2. 使用 cd 命令切换到你想要共享的文件夹。

    cd /path/to/your/project_folder
  3. 运行以下 Python 命令:

    python -m http.server
    • 在 Python 2 中,命令是 python -m SimpleHTTPServer
    • 如果你使用的是 Python 3,并且希望指定端口号(8080),可以这样做:
      python -m http.server 8080
  4. 打开你的网页浏览器,访问 http://localhost:8000 (或你指定的端口,如 http://localhost:8080),你就能看到当前文件夹的文件列表,并可以点击下载或查看。

自定义一个简单的服务器脚本

如果你想在服务器代码中加入一些简单的逻辑,可以创建一个 Python 脚本。

Python如何快速搭建简单HTTP服务器?-图3
(图片来源网络,侵删)

示例脚本:my_server.py

import http.server
import socketserver
# 设置端口号
PORT = 8000
# 创建一个自定义的请求处理器,继承自 http.server.SimpleHTTPRequestHandler
class MyHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
    # 我们可以重写方法来自定义行为
    def do_GET(self):
        # 当访问根路径 "/" 时,返回一个简单的 "Hello, World!"
        if self.path == '/':
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(b"Hello, World! This is a custom server.")
        # 否则,按照默认方式处理(比如提供文件)
        else:
            super().do_GET()
# 使用 with 语句来管理服务器,确保资源被正确释放
with socketserver.TCPServer(("", PORT), MyHTTPRequestHandler) as httpd:
    print(f"Server running at http://localhost:{PORT}")
    try:
        # 让服务器一直运行,直到被键盘中断 (Ctrl+C)
        httpd.serve_forever()
    except KeyboardInterrupt:
        print("\nServer stopped.")
        httpd.server_close()

如何运行:

  1. 将上述代码保存为 my_server.py 文件。
  2. 在终端中运行它:
    python my_server.py
  3. 访问 http://localhost:8000,你会看到 "Hello, World! ...",访问 http://localhost:8000/some_file.txt(如果该文件存在),则会下载或显示该文件。

使用 Flask (更现代、更强大)

对于构建真正的 Web 应用程序(不仅仅是提供文件),Flask 是一个更流行、更灵活的微框架,它提供了路由、模板、请求处理等强大的功能。

安装 Flask

你需要安装 Flask:

pip install Flask

创建一个 Flask 应用

示例脚本:app.py

from flask import Flask
# 创建一个 Flask 应用实例
app = Flask(__name__)
# 使用 @app.route 装饰器来定义 URL 路由
# 当访问根路径 "/" 时,hello_world 函数会被调用
@app.route('/')
def hello_world():
    return '<h1>Hello, Flask World!</h1><p>This is a web application.</p>'
# 定义一个带有动态参数的路由
@app.route('/user/<username>')
def show_user_profile(username):
    # f-string 用于格式化字符串
    return f'<h1>Hello, {username}!</h1>'
# 运行这个应用
if __name__ == '__main__':
    # debug=True 会在代码修改后自动重启服务器,并在出错时提供详细的调试页面
    app.run(debug=True, port=5000)

如何运行:

  1. 将上述代码保存为 app.py 文件。
  2. 在终端中运行:
    python app.py
  3. 打开浏览器访问:
    • http://localhost:5000 -> 显示 "Hello, Flask World!"
    • http://localhost:5000/user/Alice -> 显示 "Hello, Alice!"

使用 FastAPI (高性能、现代)

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Web 框架,它基于 Starlette 和 Pydantic,支持异步请求,并且自动生成交互式 API 文档(Swagger UI)。

安装 FastAPI 和 Uvicorn (ASGI 服务器)

pip install "fastapi[all]"

[all] 会自动安装 uvicorn 和一些其他有用的依赖。

创建一个 FastAPI 应用

示例脚本:main.py

from fastapi import FastAPI
# 创建一个 FastAPI 应用实例
app = FastAPI()
# 定义一个路由
@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI World!"}
# 定义一个带有路径参数和查询参数的路由
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    # item_id 是路径参数,会被自动转换为 int
    # q 是一个可选的查询参数 (e.g., /items/5?q=somequery)
    return {"item_id": item_id, "q": q}

如何运行:

  1. 将上述代码保存为 main.py 文件。

  2. 在终端中运行 Uvicorn 服务器:

    uvicorn main:app --reload
    • main: 是你的 Python 文件名 (main.py)。
    • app: 是 FastAPI 应用实例的变量名 (app = FastAPI())。
    • --reload: 会在代码修改后自动重启服务器。
  3. 打开浏览器访问:

    • http://127.0.0.1:8000 -> 显示 {"message": "Hello, FastAPI World!"}
    • http://127.0.0.1:8000/items/5?q=somequery -> 显示 {"item_id": 5, "q": "somequery"}

查看自动生成的 API 文档

FastAPI 最大的优点之一是自动生成交互式文档,访问以下地址:

  • Swagger UI: http://127.0.0.1:8000/docs
  • ReDoc: http://127.0.0.1:8000/redoc

你可以直接在页面上测试你的 API 端点!

总结与选择

特性 http.server Flask FastAPI
用途 快速测试、文件共享、学习 小型到中型 Web 应用、网站后端 高性能 API、微服务、现代应用
易用性 极简单,一行命令即可 简单,学习曲线平缓 简单,但概念更现代(如异步、类型提示)
功能 非常基础,仅提供静态文件 强大,路由、模板、会话等 非常强大,异步、数据验证、自动文档
性能 低(单线程,同步) 中等(WSGI,同步) (ASGI,支持异步)
依赖 Python 内置,无需安装 需要安装 需要安装

如何选择?

  • 只想快速分享一个文件夹? -> 使用 python -m http.server,这是最快、最直接的方法。
  • 想构建一个有页面、有交互的传统网站? -> 使用 Flask,它生态系统成熟,易于上手。
  • 想构建高性能的 API,或者你的项目需要处理大量并发请求? -> 使用 FastAPI,它是目前 Python Web 开发的热门选择,性能卓越且功能强大。
分享:
扫描分享到社交APP
上一篇
下一篇