2010-10-17 17:55:07 +0000 2010-10-17 17:55:07 +0000
40
40

CURL下载目录

我试图用CURL下载一个完整的网站目录。下面的命令不能用。

curl -LO http://example.com/

返回一个错误: curl: Remote file name has no length!.

但当我这样做时。curl -LO http://example.com/someFile.type就可以了。有什么办法可以下载指定目录下的所有文件吗?谢谢。

答案 (6)

40
40
40
2014-01-31 16:44:52 +0000

对我来说总是有效的,包括没有父目录和递归只得到所需的目录。

wget --no-parent -r http://WEBSITE.com/DIRECTORY
32
32
32
2010-10-17 19:59:25 +0000

HTTP并没有真正意义上的目录概念。除了前三个斜线(http://example.com/)之外,其他的斜线并没有任何特殊的意义,除了相对URL中的..。所以除非服务器遵循特定的格式,否则没有办法 “下载指定目录下的所有文件"。

如果你想下载整个网站,你最好的选择是递归遍历主页面的所有链接。Curl做不到,但wget可以。如果网站不是太动态的话,这样做是可行的(尤其是,wget不会看到由Javascript代码构建的链接)。从wget -r http://example.com/开始,在wget手册中的 "递归检索选项 "和 "递归接受/拒绝选项 "下寻找更多相关选项(递归深度、排除列表等)。

如果网站试图阻止自动下载,你可能需要更改用户代理字符串(-U Mozilla),并忽略robots.txt(创建一个空文件example.com/robots.txt,并使用-nc选项,这样wget就不会试图从服务器下载)。

17
17
17
2014-01-23 11:50:03 +0000

在这种情况下,curl不是最好的工具。你可以用wget参数来使用-r,像这样。

wget -r http://example.com/

这是最基本的形式,你也可以使用其他参数。更多信息,请参见manpageman wget)。

5
5
5
2010-10-17 17:59:25 +0000

这是不可能的。没有一个标准的、普遍实现的方式让网络服务器将目录的内容返回给你。大多数服务器确实会生成一个目录的HTML索引,如果配置成这样的话,但是这个输出并不是标准的,也没有任何保证。你可以解析这个HTML,但要记住,格式会因服务器的不同而改变,而且不会总是被启用。

2
2
2
2013-01-20 00:08:28 +0000

你可以使用Firefox扩展DownThemAll! 它可以让你一键下载一个目录中的所有文件。它也是可定制的,你可以指定要下载的文件类型。这是我发现的最简单的方法。

0
0
0
2014-01-23 12:44:17 +0000

你可能会在这里找到一个网站开膛手的用途,这将下载所有的东西,并修改内容/内部链接供本地使用。一个好的可以在这里找到。 http://www.httrack.com