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

Python中使用BaseHTTPServer.BaseHTTPRequestHandler记录访问日志

发布时间:2024-01-16 05:32:32

在Python中,可以使用BaseHTTPServer.BaseHTTPRequestHandler模块来记录访问日志。BaseHTTPRequestHandler是Python标准库中用于处理HTTP请求的基类,可以通过继承并重写其中的方法来实现自定义的HTTP服务器。

下面是一个使用BaseHTTPRequestHandler记录访问日志的示例代码:

from BaseHTTPServer import BaseHTTPRequestHandler


class MyHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 处理GET请求
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write("Hello, World!")

        # 记录访问日志
        log = self.client_address[0] + " - - [" + self.log_date_time_string() + "] \"" + self.requestline + "\" 200"
        print(log)


if __name__ == "__main__":
    from BaseHTTPServer import HTTPServer

    server_address = ("", 8000)
    httpd = HTTPServer(server_address, MyHTTPRequestHandler)
    print("Starting server on port 8000...")
    httpd.serve_forever()

在上述代码中,我们继承了BaseHTTPRequestHandler类,并重写了其中的do_GET方法来处理GET请求。在处理完成GET请求后,我们在do_GET方法中添加了记录访问日志的代码。

self.client_address[0]可以获取到客户端的IP地址,self.log_date_time_string()可以获取到当前时间,self.requestline可以获取到客户端的请求行。我们将这些信息拼接成一个日志字符串,并打印在控制台。

通过运行上述代码,启动一个HTTP服务器,在客户端通过浏览器访问http://localhost:8000时,会返回一个"Hello, World!"的响应,并在控制台输出访问日志。

这只是一个简单的示例,实际应用中,可以将访问日志写入文件或存储到数据库中,也可以对日志进行格式化输出等操作。