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

使用BaseHTTPServer.BaseHTTPRequestHandler实现静态文件服务器

发布时间:2024-01-16 05:34:43

BaseHTTPServer是Python中内置的一个HTTP服务器模块,它提供了一个HTTP服务器基类BaseHTTPRequestHandler,可以用来实现静态文件服务器。

下面是一个使用BaseHTTPRequestHandler实现静态文件服务器的示例:

import os
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

# 设置静态文件所在的根目录
ROOT_DIR = '/path/to/static/files'

class StaticFileHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 获取请求的路径
        path = self.path

        # 拼接请求路径和根目录的路径
        file_path = os.path.join(ROOT_DIR, path[1:])

        # 如果文件存在,则返回文件内容
        if os.path.exists(file_path) and os.path.isfile(file_path):
            with open(file_path, 'rb') as file:
                content = file.read()
                self.send_response(200)
                self.send_header('Content-type', 'text/html')
                self.send_header('Content-length', str(len(content)))
                self.end_headers()
                self.wfile.write(content)
        else:
            # 如果文件不存在,则返回404错误
            self.send_error(404, 'File Not Found: %s' % path)

# 创建一个HTTP服务器实例
server = HTTPServer(('localhost', 8000), StaticFileHandler)
print('Server running on localhost:8000')
server.serve_forever()

在上面的示例中,我们创建了一个名为StaticFileHandler的类,继承自BaseHTTPRequestHandler。在do_GET方法中,我们首先获取请求的路径,然后拼接出完整的文件路径。

如果文件存在,则使用send_response方法发送200状态码以及相应的响应头;然后使用send_header方法设置Content-type和Content-length响应头;最后通过wfile.write方法将文件内容作为响应体发送给客户端。

如果文件不存在,则使用send_error方法发送404错误。

最后,我们创建了一个HTTPServer实例,指定监听的主机和端口,以及处理请求的处理程序类StaticFileHandler。然后通过serve_forever方法启动服务器。

要使用这个静态文件服务器,只需将ROOT_DIR设置为存放静态文件的根目录,然后运行以上代码即可。用户可以通过访问http://localhost:8000/来访问根目录下的文件。如果存在文件,则返回文件内容;如果不存在文件,则返回404错误。