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

Python中http.server.BaseHTTPRequestHandler构建静态文件服务器的实例

发布时间:2024-01-04 18:03:22

在Python中,可以使用http.server模块中的BaseHTTPRequestHandler类来构建一个简单的静态文件服务器。BaseHTTPRequestHandler类是一个抽象基类,可以通过继承它并实现特定的方法来创建自定义的HTTP请求处理程序。

下面是一个使用BaseHTTPRequestHandler构建静态文件服务器的实例,它可以处理GET请求并返回请求的静态文件内容:

import http.server
import socketserver

# 继承BaseHTTPRequestHandler类并实现do_GET方法
class SimpleHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
    # 处理GET请求
    def do_GET(self):
        try:
            file_path = self.path[1:]  # 获取请求的文件路径,去掉开头的斜杠
            # 打开文件并读取内容
            with open(file_path, 'rb') as file:
                content = file.read()
            # 设置响应状态码为200
            self.send_response(200)
            # 设置响应头
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            # 发送文件内容给客户端
            self.wfile.write(content)
        except FileNotFoundError:
            # 如果文件不存在,返回404状态码
            self.send_error(404, 'File not found')

# 创建一个HTTP服务器,并监听本地的8000端口
with socketserver.TCPServer(('localhost', 8000), SimpleHTTPRequestHandler) as server:
    print('Server started on localhost:8000...')
    # 启动服务器,一直运行
    server.serve_forever()

在上面的例子中,我们创建了一个名为SimpleHTTPRequestHandler的子类来处理HTTP请求。do_GET方法用于处理GET请求,首先解析请求的文件路径,并尝试打开文件并读取其内容。如果文件存在,我们设置响应状态码为200,并发送文件内容给客户端。如果文件不存在,我们返回404状态码。

然后,我们使用socketserver模块中的TCPServer类创建一个HTTP服务器,并指定服务器的监听地址和端口号。在这个例子中,我们选择了本地的8000端口。最后,通过调用server.serve_forever()方法来启动服务器,使其一直运行。

要测试这个静态文件服务器,可以将上述代码保存为一个Python脚本文件(例如server.py),并使用命令python server.py来运行它。然后,打开Web浏览器并访问http://localhost:8000,就可以看到服务器返回的文件内容了。

需要注意的是,上述代码只是一个最基础的实例,没有考虑安全性和性能优化。在实际生产环境中,需要根据具体需求进行更多的处理和改进。