Python中http.server.BaseHTTPRequestHandler的基本用法和示例
BaseHTTPRequestHandler 是 Python 内置的一个 HTTP 服务器处理请求的基类。它继承自 socketserver.BaseRequestHandler,用于处理来自客户端的 HTTP 请求,并生成相应的 HTTP 响应。
使用 BaseHTTPRequestHandler 基本分为以下几个步骤:
1. 创建自定义的处理器类,继承 BaseHTTPRequestHandler,并重写 do_GET()、do_POST() 等方法来处理对应的请求方法。
2. 创建 HTTP 服务器实例,指定监听的地址和端口,并指定处理器类。
3. 启动 HTTP 服务器。
下面是一个简单的示例:
from http.server import BaseHTTPRequestHandler, HTTPServer
# 自定义处理器类
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
# 设置响应状态码为 200
self.send_response(200)
# 设置响应头部
self.send_header('Content-type', 'text/html')
self.end_headers()
# 构造响应内容
response = "Hello, world!"
# 发送响应内容
self.wfile.write(response.encode())
def do_POST(self):
# 设置响应状态码为 200
self.send_response(200)
# 设置响应头部
self.send_header('Content-type', 'text/html')
self.end_headers()
# 获取请求内容
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
# 构造响应内容
response = "Received: {}".format(post_data.decode())
# 发送响应内容
self.wfile.write(response.encode())
def main():
# 创建 HTTP 服务器实例
server = HTTPServer(('localhost', 8000), MyHandler)
# 启动 HTTP 服务器,直到终止进程
server.serve_forever()
if __name__ == "__main__":
main()
在上述示例中,自定义的处理器类 MyHandler 继承自 BaseHTTPRequestHandler,并重写了 do_GET() 和 do_POST() 方法来处理对应的 GET 和 POST 请求。
对于 GET 请求,我们设置了响应的状态码为 200,并在响应头部设置了 Content-type 为 text/html。然后构造了响应内容为 "Hello, world!",并通过 self.wfile.write() 方法发送响应。
对于 POST 请求,我们同样设置了响应的状态码和头部。然后通过 self.headers['Content-Length'] 来获取 POST 请求的内容长度,并读取该长度的数据。最后构造了响应内容为 "Received: {post_data}",并发送响应。
在 main() 函数中,我们创建了一个 HTTP 服务器实例,设置监听地址为 'localhost',端口为 8000,并指定处理器类为 MyHandler。然后通过 server.serve_forever() 方法启动 HTTP 服务器,使其一直运行,直到终止进程。
要运行此示例,只需执行 python 文件名.py 命令即可。然后打开浏览器,访问 http://localhost:8000,即可看到 "Hello, world!" 的文字响应。
