使用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错误。
