通过http获取目录列表

ajw*_*ood 15 http wget version directory-listing

有一个目录通过网络提供,我有兴趣监控.它的内容是我正在使用的各种版本的软件,我想编写一个我可以运行的脚本来检查那里的内容,并下载任何比我已经获得的更新的内容.

有没有办法,比方说wget或什么,来获得目录列表.我试过wget在目录上使用,这给了我html.为了避免解析html文档,有没有办法检索一个简单的列表,就像ls会给出一样?

ajw*_*ood 25

我只是想办法做到这一点:

$ wget --spider -r --no-parent http://some.served.dir.ca/
Run Code Online (Sandbox Code Playgroud)

它非常冗长,所以你需要管理grep几次,具体取决于你所追求的东西,但信息就在那里.它看起来像打印到stderr,所以附加2>&1grep它.我贪图"\ .tar\.gz"找到该网站提供的所有tarball.

请注意,wget在工作目录中写入临时文件,并不会清除其临时目录.如果这是一个问题,您可以更改为临时目录:

$ (cd /tmp && wget --spider -r --no-parent http://some.served.dir.ca/)
Run Code Online (Sandbox Code Playgroud)


Rem*_*eau 6

您所要求的最佳服务是使用 FTP,而不是 HTTP。

HTTP 没有目录列表的概念,而 FTP 有。

大多数 HTTP 服务器不允许访问目录列表,而那些允许访问的服务器只是将其作为服务器的一项功能,而不是 HTTP 协议。对于那些 HTTP 服务器,它们决定生成并发送 HTML 页面供人类使用,而不是机器使用。您对此无法控制,并且别无选择,只能解析 HTML。

FTP 是为机器消耗而设计的,更重要的是引入了MLSTMLSD命令来取代不明确的LIST命令。

  • 实际上,HTTP *确实*有这个概念,它被称为WebDAV,并且它是一个可选的扩展。请参阅 RFC 4918。 (4认同)
  • WebDAV 运行在 HTTP 之上,但不是 HTTP 本身的一部分。就像 HTTP 运行在 TCP 之上但不是 TCP 本身的一部分一样。您不能使用 WebDAV 与任意 HTTP 服务器通信。它必须由每个服务器实现和启用。就像你说的,它是可选的。 (4认同)
  • 它是可选的,但您的比较的其余部分具有误导性。TCP 和 HTTP 是不同的网络层,而 PROPFIND 和 GET 位于完全相同的层。 (2认同)