Python 的 http.server 库是一个内置的标准库,提供了一个简单的 HTTP 服务器功能,方便开发者进行快速的 Web 界面测试、文件分享和本地开发等任务。这个库可以在任何支持Python的操作系统上运行,适合于快速搭建测试环境。

基本用法

在 Python 3 中,http.server 模块包含了一个基本的 HTTP 服务器,开发者只需几行代码即可启动服务。下面是一个最简单的例子:

from http.server import SimpleHTTPRequestHandler, HTTPServer

# 定义服务器的主机和端口
host = 'localhost'
port = 8000

# 创建一个 HTTP 服务器
with HTTPServer((host, port), SimpleHTTPRequestHandler) as server:
    print(f"Serving on http://{host}:{port}")
    server.serve_forever()  # 启动服务器

上述代码将创建一个在 localhost:8000 上运行的 HTTP 服务器,可以用于提供当前目录下的文件和文件夹。

处理 GET 请求

http.server 模块允许我们处理 HTTP 请求。我们可以通过继承 SimpleHTTPRequestHandler 类并重写其 do_GET 方法来自定义处理 GET 请求的行为。下面是一个例子:

from http.server import BaseHTTPRequestHandler, HTTPServer

class MyRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 设置响应状态码
        self.send_response(200)
        # 设置响应头
        self.send_header('Content-type', 'text/html')
        self.end_headers()

        # 响应内容
        self.wfile.write(b"<html><body><h1>Hello, World!</h1></body></html>")

# 定义服务器的主机和端口
host = 'localhost'
port = 8000

with HTTPServer((host, port), MyRequestHandler) as server:
    print(f"Serving on http://{host}:{port}")
    server.serve_forever()

在这个例子中,我们创建了一个继承自 BaseHTTPRequestHandler 的类 MyRequestHandler,并重写了 do_GET 方法。当有人请求该服务器时,返回一个简单的 HTML 页面,显示“Hello, World!”信息。

处理 POST 请求

除了处理 GET 请求,我们还可以处理 POST 请求。以下是一个处理 POST 请求的示例:

from http.server import BaseHTTPRequestHandler, HTTPServer
import urllib.parse

class MyPostRequestHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        # 获取请求长度
        content_length = int(self.headers['Content-Length'])
        # 读取请求数据
        post_data = self.rfile.read(content_length)

        # 解析数据
        parsed_data = urllib.parse.parse_qs(post_data.decode('utf-8'))

        # 设置响应状态码和头部
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

        # 返回处理结果
        response = f"<html><body><h1>Received POST data:</h1><pre>{parsed_data}</pre></body></html>"
        self.wfile.write(response.encode('utf-8'))

# 定义服务器的主机和端口
host = 'localhost'
port = 8000

with HTTPServer((host, port), MyPostRequestHandler) as server:
    print(f"Serving on http://{host}:{port}")
    server.serve_forever()

在此示例中,我们重写了 do_POST 方法,读取并解析 POST 请求中的数据,然后将其返回给客户端。

总结

http.server 模块十分方便,可以轻松地用于开发和测试。在实际开发中,http.server 不适合用作生产服务器,但它为开发者提供了一个快速的解决方案,让他们能够迅速搭建协议和应用程序。在实际应用场景中,可以使用这个工具来测试 API,或者作为静态文件服务器,进行本地开发时的快速文件共享。通过自定义请求处理,开发者能够在本地环境中模拟更加复杂的请求和响应逻辑,为后续的开发和测试提供便利。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部