使用python 实现一个http server

发布于:2025-07-13 ⋅ 阅读:(23) ⋅ 点赞:(0)

下面是一个使用 Python 内置库 http.server 的简单 HTTP 服务器实现。不需要安装任何第三方库,非常适合做演示或开发测试用。

from http.server import HTTPServer, BaseHTTPRequestHandler

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 设置响应状态码
        self.send_response(200)
        # 设置响应头
        self.send_header('Content-type', 'text/html; charset=utf-8')
        self.end_headers()
        # 响应内容
        self.wfile.write(b"<h1>Hello, World! This is a simple HTTP server.</h1>")

if __name__ == '__main__':
    # 监听 127.0.0.1:8080
    server_address = ('', 8080)
    httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
    print("Server started on http://127.0.0.1:8080")
    httpd.serve_forever()

使用方法:

  1. 保存为 server.py
  2. 运行:python server.py
  3. 打开浏览器访问:http://127.0.0.1:8080

你可以根据需要扩展 do_POSTdo_PUT 等方法,实现更多 HTTP 功能。


下面提供一个功能更丰富的 HTTP server 实现示例,采用流行的第三方库 Flask (适合实际开发),实现以下功能:

  • 支持 GET、POST 方法。
  • 路由分发支持路径参数。
  • JSON 数据的接收与响应。
  • 提供 404 错误处理。

如果你需要其它框架(如 FastAPI)、或更复杂的功能可以继续说明。


一、安装 Flask

首先请确保已安装 Flask:

pip install flask

二、示例代码

from flask import Flask, request, jsonify, abort

app = Flask(__name__)

# 首页
@app.route("/")
def index():
    return "<h1>Welcome to the complex Flask HTTP Server!</h1>"

# 带参数的路由
@app.route("/hello/<name>")
def hello(name):
    return f"<h2>Hello, {name}!</h2>"

# 处理 GET 和 POST 请求
@app.route("/echo", methods=["GET", "POST"])
def echo():
    if request.method == "GET":
        msg = request.args.get('msg', 'Nothing received')
        return jsonify({'method': 'GET', 'msg': msg})
    elif request.method == "POST":
        data = request.json
        return jsonify({'method': 'POST', 'data': data})

# 404 错误处理
@app.errorhandler(404)
def page_not_found(e):
    return jsonify({'error': 'Not Found'}), 404

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8888, debug=True)

三、使用说明

  1. 运行:

    python server.py
    
  2. 测试各接口:

    • 访问 http://localhost:8888/
    • 访问 http://localhost:8888/hello/Alice
    • GET 请求:http://localhost:8888/echo?msg=hello
    • POST 请求:
      curl -X POST -H "Content-Type: application/json" -d '{"test": 123}' http://localhost:8888/echo
      
  3. 访问未定义的路径,返回 404。



网站公告

今日签到

点亮在社区的每一天
去签到