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

Python中http.server.BaseHTTPRequestHandler的常见用法

发布时间:2024-01-04 17:56:19

http.server.BaseHTTPRequestHandler 是 Python 标准库中一个用于处理 HTTP 请求的基类。通过继承 BaseHTTPRequestHandler,我们可以自定义处理 HTTP 请求的逻辑。下面是 BaseHTTPRequestHandler 的一些常见用法和示例:

1. 构造函数和请求处理函数:

- 构造函数:BaseHTTPRequestHandler.__init__(self, request, client_address, server)

- request:一个包含请求的字节数据。

- client_address:一个元组,包含客户端的 IP 和端口号。

- server:一个 HTTPServer 对象,用于处理请求。

- 请求处理函数:可以根据具体的 HTTP 方法进行不同的处理,例如 do_GET()do_POST()do_PUT() 等。

- do_METHOD():在具体的请求处理函数中,METHOD 表示 HTTP 方法,例如 GET、POST、PUT 等。在这个函数中,可以根据具体的请求内容进行处理,然后通过调用 send_response()send_header()end_headers() 发送响应头信息,并通过调用 wfile.write() 发送响应内容。

2. 响应头信息的设置:

- send_response(code, message=None):设置响应状态码和状态消息。例如:self.send_response(200, 'OK')

- send_header(keyword, value):设置响应头的字段值。例如:self.send_header('Content-type', 'text/html')

- end_headers():通知服务器响应头已经发送完毕。要在 send_header() 调用后调用。

3. 读取请求信息:

- self.rfile.read(size=-1):读取请求的主体内容,size 参数指定要读取的最大字节数。例如:data = self.rfile.read(int(self.headers.get('Content-Length', 0)))

- self.headers:一个包含请求头字段的字典。例如:content_type = self.headers.get('Content-Type')

下面是一个使用 BaseHTTPRequestHandler 的简单示例,该示例处理了一个 GET 请求并返回一个 HTML 页面:

from http.server import BaseHTTPRequestHandler, HTTPServer


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

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

if __name__ == '__main__':
    server_address = ('', 8000)
    httpd = HTTPServer(server_address, MyHandler)
    httpd.serve_forever()

在上面的示例中,我们定义了一个名为 MyHandler 的类,继承自 BaseHTTPRequestHandler。在 do_GET() 函数中,我们设置了响应状态码和响应头,然后通过 self.wfile.write() 发送了一个简单的 HTML 页面作为响应内容。

运行这个示例程序,可以启动一个简单的 HTTP 服务器,监听本地的 8000 端口。当访问 http://localhost:8000 时,会收到一个包含 "Hello, World!" 的 HTML 页面作为响应。