欢迎访问宙启技术站
智能推送

使用BaseHTTPServer实现动态内容的HTTP服务器

发布时间:2023-12-25 10:31:47

使用 BaseHTTPServer模块可以轻松地实现动态内容的 HTTP 服务器。BaseHTTPServer 模块是 Python 标准库中的一部分,提供了一个简单的基于类的面向对象接口,用于创建 HTTP 服务器。

下面是一个简单的示例,演示了如何使用 BaseHTTPServer 模块创建一个简单的 HTTP 服务器,并提供动态内容。假设我们要实现一个简单的时间查询服务,客户端向服务器发送请求后,服务器将返回当前时间。

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import time

# 定义处理请求的处理程序
class TimeRequestHandler(BaseHTTPRequestHandler):
    # 处理 GET 请求
    def do_GET(self):
        # 设置响应状态码
        self.send_response(200)
        # 设置响应头部
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        
        # 获取并格式化当前时间
        current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        # 构造响应内容
        response = "<html><body><h2>The current time is: {0}</h2></body></html>".format(current_time)
        # 发送响应内容
        self.wfile.write(response)
        return

# 创建 HTTP 服务器并运行
def run():
    try:
        # 创建 HTTP 服务器对象,监听本地 8000 端口
        server = HTTPServer(('', 8000), TimeRequestHandler)
        print("Starting server, use <Ctrl-C> to stop")
        server.serve_forever()
    except KeyboardInterrupt:
        print("
Stopping server...")
        server.socket.close()

# 运行服务器
if __name__ == '__main__':
    run()

在上述示例中,我们创建了一个名为 TimeRequestHandler 的类,继承自 BaseHTTPRequestHandler,用于处理 HTTP 请求。在这个类中,我们重写了 do_GET 方法,用于处理 GET 请求。

do_GET 方法中,我们首先设置响应状态码为 200,然后设置响应头部,以确保客户端能够正确解析响应。接下来,获取当前时间并格式化为指定的格式,构造响应内容,并通过 self.wfile.write 方法将响应内容发送给客户端。

run 函数中,我们创建了一个 HTTPServer 对象,指定监听的端口和请求处理的类,然后使用 serve_forever 方法启动服务器,并保持运行状态。当用户按下 Ctrl-C 组合键时,我们捕获 KeyboardInterrupt 异常,关闭服务器,并终止程序的执行。

要运行上述代码,可以保存在一个名为 server.py 的文件中,然后运行 python server.py,服务器将在本地的 8000 端口上运行。

使用一个支持 HTTP 请求的客户端(例如 web 浏览器),向 http://localhost:8000 发送请求,即可看到服务器返回的当前时间信息。

这只是一个简单的示例。你可以根据自己的需求,进一步扩展请求处理程序,提供更多的动态内容。