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

Python中利用SimpleHTTPServer模块实现文件列表浏览的功能示例

发布时间:2023-12-25 22:09:59

Python中可以使用SimpleHTTPServer模块实现文件列表浏览的功能。SimpleHTTPServer模块是Python标准库中的一个模块,它提供了一个简单的Web服务器,可以用于快速地共享文件或测试Web页面。

下面是一个示例代码:

import SimpleHTTPServer
import SocketServer

# 设置服务器的端口号
PORT = 8000

# 创建一个简单的HTTP请求处理类,继承自SimpleHTTPServer.SimpleHTTPRequestHandler
class FileListHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    # 重写do_GET方法,用于处理GET请求
    def do_GET(self):
        # 判断请求的路径是否为根路径'/'
        if self.path == '/':
            # 获取当前目录下的所有文件
            file_list = '
'.join(self.get_file_list())
            
            # 构建响应内容
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write('<html><head><title>Files</title></head><body>')
            self.wfile.write('<h1>Files</h1>')
            self.wfile.write('<pre>{}</pre>'.format(file_list))
            self.wfile.write('</body></html>')
        else:
            # 如果请求的路径不是根路径,则调用父类的do_GET方法处理该请求
            SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
    
    # 获取当前目录下的所有文件
    def get_file_list(self):
        import os
        file_list = []
        
        # 获取当前路径
        current_dir = os.path.abspath('.')
        
        # 遍历当前目录下的所有文件和目录
        for name in os.listdir(current_dir):
            file_path = os.path.join(current_dir, name)
            
            # 判断是否为文件
            if os.path.isfile(file_path):
                file_list.append(name)
        
        return file_list

# 创建一个SocketServer.TCPServer对象,指定要绑定的地址和端口号
httpd = SocketServer.TCPServer(('localhost', PORT), FileListHandler)

# 启动Web服务器
print 'Server running on port {}'.format(PORT)
httpd.serve_forever()

上述代码中,我们首先导入了SimpleHTTPServer模块和SocketServer模块,然后设置了服务器的端口号为8000。

接下来,我们创建了一个名为FileListHandler的类,继承自SimpleHTTPServer.SimpleHTTPRequestHandler类。在该类中,我们重写了do_GET方法,用于处理GET请求。

在重写的do_GET方法中,我们首先判断请求的路径是否为根路径'/',如果是,则获取当前目录下的所有文件,并构建响应内容返回给客户端。

调用httpd.serve_forever()方法启动Web服务器。当我们在浏览器中访问http://localhost:8000时,就可以看到当前目录下的所有文件列表了。

需要注意的是,SimpleHTTPServer模块默认是对文件进行下载,即使是html文件也会被下载。如果你希望在浏览器中查看html文件,可以使用python3中的http.server模块。它提供了一个名为http.server.SimpleHTTPRequestHandler的类,用法与SimpleHTTPServer模块相似。

下面是一个使用http.server模块实现文件列表浏览的示例代码:

import http.server
import socketserver

# 设置服务器的端口号
PORT = 8000

# 创建一个简单的HTTP请求处理类,继承自http.server.SimpleHTTPRequestHandler
class FileListHandler(http.server.SimpleHTTPRequestHandler):
    # 重写do_GET方法,用于处理GET请求
    def do_GET(self):
        # 判断请求的路径是否为根路径'/'
        if self.path == '/':
            # 获取当前目录下的所有文件
            file_list = '
'.join(self.get_file_list())
            
            # 构建响应内容
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write('<html><head><title>Files</title></head><body>')
            self.wfile.write('<h1>Files</h1>')
            self.wfile.write('<pre>{}</pre>'.format(file_list))
            self.wfile.write('</body></html>'.encode())
        else:
            # 如果请求的路径不是根路径,则调用父类的do_GET方法处理该请求
            http.server.SimpleHTTPRequestHandler.do_GET(self)
    
    # 获取当前目录下的所有文件
    def get_file_list(self):
        import os
        file_list = []
        
        # 获取当前路径
        current_dir = os.path.abspath('.')
        
        # 遍历当前目录下的所有文件和目录
        for name in os.listdir(current_dir):
            file_path = os.path.join(current_dir, name)
            
            # 判断是否为文件
            if os.path.isfile(file_path):
                file_list.append(name)
        
        return file_list

# 创建一个socketserver.TCPServer对象,指定要绑定的地址和端口号
httpd = socketserver.TCPServer(('localhost', PORT), FileListHandler)

# 启动Web服务器
print('Server running on port {}'.format(PORT))
httpd.serve_forever()

上述代码中,我们首先导入了http.server模块和socketserver模块,然后设置了服务器的端口号为8000。

接下来,我们创建了一个名为FileListHandler的类,继承自http.server.SimpleHTTPRequestHandler类。在该类中,我们重写了do_GET方法,用于处理GET请求。在重写的do_GET方法中,我们首先判断请求的路径是否为根路径'/',如果是,则获取当前目录下的所有文件,并构建响应内容返回给客户端。

调用httpd.serve_forever()方法启动Web服务器。当我们在浏览器中访问http://localhost:8000时,就可以看到当前目录下的所有文件列表了。

需要注意的是,以上代码只能在Python2.x版本中使用,如果你使用的是Python3.x版本,可以将print语句修改为print函数即可在Python3.x版本中运行。