Python中http.server.BaseHTTPRequestHandler详细说明
BaseHTTPRequestHandler是Python提供的一个用于处理HTTP请求的基类,它位于http.server模块中。它提供了一些方法,可以用于处理不同的HTTP请求,包括GET、POST等。
下面是一个示例代码,演示如何使用BaseHTTPRequestHandler创建一个简单的HTTP服务器:
from http.server import BaseHTTPRequestHandler, HTTPServer
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(b"Hello, World!")
def main():
try:
server = HTTPServer(('', 8080), MyHandler)
print('Started HTTP server on port 8080')
server.serve_forever()
except KeyboardInterrupt:
print('^C received, shutting down the web server')
server.socket.close()
if __name__ == '__main__':
main()
在上面的代码中,我们定义了一个名为MyHandler的子类,继承自BaseHTTPRequestHandler。
我们重写了do_GET方法,当收到GET请求时,会调用该方法。在该方法中,我们首先发送一个响应头,然后发送一个响应体,内容为"Hello, World!"。
我们还定义了一个main函数,用于创建HTTPServer实例,并指定服务器的地址和端口。然后调用serve_forever()方法,使服务器一直运行,直到收到中断信号。
运行该程序后,你可以使用浏览器访问http://localhost:8080,就能看到页面显示"Hello, World!"。
除了do_GET方法,BaseHTTPRequestHandler还提供了其他一些方法,可以用于处理不同类型的HTTP请求。
- do_HEAD():处理HEAD请求
- do_POST():处理POST请求
- do_PUT():处理PUT请求
- do_DELETE():处理DELETE请求
你可以根据需要重写这些方法,来处理不同的请求类型。
除了处理不同类型的请求,BaseHTTPRequestHandler还提供了一些属性和方法,可以用于获取请求相关的信息,如请求方式、请求头、URL等。
- self.command:获取请求的方法,如'GET'、'POST'等
- self.path:获取请求的URL路径
- self.headers:获取请求的头部信息
- self.send_response():发送一个HTTP响应码
- self.send_header():发送一个HTTP响应头
- self.end_headers():结束HTTP响应头的发送
- self.wfile.write():发送响应体的内容
总结起来,BaseHTTPRequestHandler是一个很灵活的类,可以通过重写其中的方法来自定义处理HTTP请求的逻辑。
