使用BaseHTTPServer实现动态内容的HTTP服务器
使用 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 发送请求,即可看到服务器返回的当前时间信息。
这只是一个简单的示例。你可以根据自己的需求,进一步扩展请求处理程序,提供更多的动态内容。
