Python中利用SimpleHTTPServer模块实现文件列表浏览的功能示例
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版本中运行。
