Python中http.server和BaseHTTPRequestHandler的区别与联系
http.server是Python标准库中提供的一个模块,它包含了一些用于处理HTTP请求的类,其中最重要的就是BaseHTTPRequestHandler类。BaseHTTPRequestHandler是一个基类,通过继承它可以编写自定义的HTTP请求处理类。
BaseHTTPRequestHandler类是一个实现了HTTP服务器功能的基类,它提供了一些方法来处理各种类型的HTTP请求,包括GET、POST、PUT等。使用BaseHTTPRequestHandler可以很方便地实现一个简单的HTTP服务器,同时也可以通过重写其中的方法来扩展功能。
下面是一个使用http.server和BaseHTTPRequestHandler的例子:
from http.server import BaseHTTPRequestHandler, HTTPServer
class MyHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(bytes("Hello, World!", "utf8"))
def run():
server_address = ('', 8000)
httpd = HTTPServer(server_address, MyHTTPRequestHandler)
print('Starting server...')
httpd.serve_forever()
if __name__ == '__main__':
run()
在这个例子中,我们定义了一个自己的HTTP请求处理类MyHTTPRequestHandler,继承自BaseHTTPRequestHandler。这个类重写了父类的do_GET方法,当收到GET请求时,会发送一个200状态码和"Hello, World!"的响应。
在run函数中,我们创建了一个HTTPServer对象,并将自定义的HTTP请求处理类传递给它。然后调用serve_forever方法启动服务器,让它一直运行。
这里通过调用print函数输出了"Starting server...",可以看到服务器已经启动了。然后我们可以在浏览器中输入"http://localhost:8000"访问这个简单的HTTP服务器,就可以看到页面上显示了"Hello, World!"。
通过这个例子可以看出,http.server和BaseHTTPRequestHandler可以帮助我们很容易地实现一个简单的HTTP服务器,并且也提供了很多方法来处理HTTP请求。使用者可以根据自己的需求,重写这些方法来实现自己想要的功能。
