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

Python网络编程进阶:深入学习Six.moves.BaseHTTPServer模块

发布时间:2023-12-11 07:47:26

Python的标准库中有一个BaseHTTPServer模块,提供了一个基本的http服务器类,可以用于编写简单的http服务器。它封装了很多底层操作,使得使用起来非常方便。另外,在Python 3.x中,BaseHTTPServer模块被重命名为http.server模块,不过通过six模块可以兼容Python 2.x和Python 3.x。

下面是一个使用BaseHTTPServer模块的简单例子,实现一个简单的http服务器并响应GET请求:

from six.moves.BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from six.moves import urllib

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 获取请求路径
        path = urllib.parse.unquote(self.path)
        
        # 设置响应头
        self.send_response(200)
        self.send_header('Content-Type', 'text/html')
        self.end_headers()
        
        # 构造响应内容
        response = '<html><body><h1>Hello, World!</h1>'
        response += '<p>You requested: {}</p>'.format(path)
        response += '</body></html>'
        
        # 发送响应内容
        self.wfile.write(response.encode('utf-8'))

def main():
    try:
        # 创建http服务器并绑定端口
        server = HTTPServer(('', 8000), MyHandler)
        print('Started http server on port 8000')
        
        # 运行http服务器
        server.serve_forever()
    except KeyboardInterrupt:
        # 当按下Ctrl+C时停止服务器
        print('^C received, shutting down the server')
        server.socket.close()

if __name__ == '__main__':
    main()

在这个例子中,我们创建了一个自定义的请求处理类MyHandler,它继承自BaseHTTPRequestHandler类。我们重写了do_GET方法,当收到GET请求时,会调用这个方法来处理请求。在do_GET方法中,我们首先获取请求的路径,然后设置响应头,构造响应内容,最后发送响应。

main函数中,我们首先创建了一个HTTPServer对象,指定监听的端口号和请求处理类。然后调用serve_forever方法来启动http服务器。当收到键盘中断信号(Ctrl+C)时,我们会停止服务器。

要使用这个http服务器,我们只需要运行这个脚本,然后在浏览器中访问http://localhost:8000,就可以看到服务器的响应了。而且这个服务器可以根据请求的路径动态地构造响应内容,非常灵活。

这只是BaseHTTPServer模块的一个简单使用例子,实际上,它还提供了很多其他的功能,比如处理POST请求、处理文件上传、重定向等等。可以参考Python的官方文档来进一步学习和了解。