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

Python中http.server.BaseHTTPRequestHandler实现简单的文件服务器

发布时间:2024-01-04 18:00:43

在Python中,http.server.BaseHTTPRequestHandler类是用于实现基本的HTTP请求处理程序的基类。通过继承这个类,我们可以创建简单的文件服务器。

下面是一个使用BaseHTTPRequestHandler实现简单文件服务器的例子:

from http.server import BaseHTTPRequestHandler, HTTPServer


class SimpleFileServer(BaseHTTPRequestHandler):
    def do_GET(self):
        try:
            # 如果请求路径是根路径,则返回index.html文件
            if self.path == '/':
                self.path = '/index.html'

            # 打开请求的文件
            file = open(self.path[1:], 'rb')
            # 读取文件内容
            content = file.read()
            file.close()

            # 设置响应状态码为200(成功)
            self.send_response(200)
            # 设置响应头
            self.send_header('Content-type', 'text/html')
            self.end_headers()

            # 发送文件内容给客户端
            self.wfile.write(content)

        except IOError:
            # 如果请求的文件不存在,返回404错误
            self.send_error(404, 'File Not Found: {}'.format(self.path))


def run_server():
    # 创建服务器对象,并指定端口号
    server_address = ('', 8000)
    httpd = HTTPServer(server_address, SimpleFileServer)
    print('Server running on port 8000...')
    # 启动服务器
    httpd.serve_forever()


if __name__ == '__main__':
    run_server()

在上述代码中,我们首先自定义了一个名为SimpleFileServer的类,该类继承自BaseHTTPRequestHandler。在SimpleFileServer类中,我们实现了一个do_GET方法,该方法处理GET请求。

当接收到GET请求时,首先会检查请求路径是否为根路径。如果是根路径,则将请求路径设置为index.html文件。然后,打开这个文件并读取其内容。接下来,将响应状态码设置为200(成功),设置响应头并发送文件内容给客户端。

如果请求的文件不存在,会发送404错误。

run_server函数中,我们创建了一个HTTPServer对象,并指定服务器地址和端口号。然后,启动服务器并进入无限循环以等待客户端请求。

要使用这个简单的文件服务器,可以将以上代码保存为server.py文件,并在命令行中执行python server.py。然后,在浏览器中访问http://localhost:8000即可查看服务器上的文件。请确保将要访问的文件放置在与server.py文件相同的目录中。如果index.html文件不存在,服务器将会返回404错误。

注意:这个简单的文件服务器没有提供安全功能,因此请不要在公共网络中使用。