用 FUSE 挂载 HTTP 文件目录

Apache、nginx 等服务器软件都有生成文件目录的功能。这类目录通常只考虑到人类的可读性,给机读带来很大困难。之前有解析目录列表的一些实现 [1] [2],但不能覆盖大多数情况。为了之前挖的坑(实现自动获取软件更新信息) [3],我实现了一个能解析大部分文件目录的程序「htmllisting-parser」。

其能解析用 <pre><table><ul> 的常见文件目录,包括 Apache、nginx、lighttpd、darkhttpd 和 Python http.server 等服务器的默认样式,生成文件名、修改时间、大小、描述的列表。解析的基本思想就是模式匹配,对 <pre> 就先找链接,再在每一栏找修改时间和文件大小;<table> 先找表头;<ul> 列举链接就可以了。程序写的有点面条,一堆黑科技,有空再整理和模块化。

以这个解析器为基础,就能写出较为高效的 FUSE 文件系统,用来挂载 HTTP 目录。目前其他实现只能挂载单文件 [4],或需要服务端配合 [5],或需要大量执行 HEAD 请求获取文件信息 [6]。利用 HTTP 文件目录可以避免 FTP 的不安全和不灵活的设置、SFTP 的单连接、WebDAV 缺少好实现的问题,可以配合 HTTPS 和基本认证等实现简单文件共享。

[1]https://github.com/sifmelcara/directory-listing-webpage-parser
[2]https://github.com/lig/dirlistings-client
[3]https://github.com/AOSC-Dev/piss
[4]http://httpfs.sourceforge.net/
[5]https://github.com/cyrus-and/httpfs
[6]https://github.com/yvesf/fuse-httpfs