BaseHTTPServer.HTTPServer类的构造函数__init__()解析
BaseHTTPServer.HTTPServer类是Python标准库中用于创建基于HTTP协议的服务器的类。它继承自SocketServer.TCPServer类,并且基于SocketServer.BaseServer类实现。
HTTPServer类的构造函数__init__()用于初始化一个HTTP服务器对象。它的参数包括server_address、RequestHandlerClass和bind_and_activate。
1. server_address: 一个元组,表示服务器的地址和端口。通常形式为("主机地址", 端口号),例如('localhost', 8000)。
2. RequestHandlerClass: 子类化自BaseHTTPServer.BaseHTTPRequestHandler的类。该类用于处理客户端请求并返回响应。
3. bind_and_activate: 一个布尔值,默认为True。表示服务器是否要立即绑定并激活端口。
下面是一个使用HTTPServer类的例子:
import BaseHTTPServer
class MyRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write('Hello, world!')
def main():
try:
server = BaseHTTPServer.HTTPServer(('localhost', 8000), MyRequestHandler)
print 'Started server on localhost:8000...'
server.serve_forever()
except KeyboardInterrupt:
print '^C received, shutting down the server'
server.socket.close()
if __name__ == '__main__':
main()
上面的例子创建了一个简单的HTTP服务器,监听本地主机上的8000端口。当有客户端发送GET请求时,服务器会返回一个包含"Hello, world!"的HTML响应。
在main()函数中,首先创建了一个HTTPServer对象,指定服务器的地址为('localhost', 8000),并将处理请求的类设为MyRequestHandler。然后通过调用serve_forever()方法启动服务器,该方法将服务器设置为永久运行,直到接收到键盘中断信号。最后,在接收到中断信号后关闭服务器的socket连接。
需要注意的是,HTTPServer无法处理POST请求,如果需要处理POST请求,可以使用ForkingHTTPServer或ThreadingHTTPServer类。此外,在实际生产环境中,通常会使用更强大的框架,如Flask或Django来构建Web服务器。
