Linux 中的 cURL 与 wget:有什么区别?

简介: wget 命令主要用于下载网页和网站,与 cURL 相比,它支持的协议不多。 cURL 适用于各种远程文件传输,而不仅仅是网站,它还支持文件压缩等附加功能。
如果你问一群 Linux 用户他们用什么下载文件,有些人会说 wget
而其他人会说 cURL
。有什么区别,一个比另一个更好?
wget 和 cURL 的历史
早在 1960 年代,政府研究人员就开始将不同的网络连接在一起,从而产生了相互连接的网络作品。但我们所知道的互联网诞生于 1983 年 1 月 1 日,当时 TCP/IP 协议已实施。这是缺失的环节。它允许不同的计算机和网络使用通用标准进行通信。
1991 年,CERN 发布了他们已经在内部使用了几年的万维网软件。对这种互联网视觉覆盖的兴趣是直接而广泛的。到 1994 年底,已有 10,000 台网络服务器和 1000 万用户。
这两个里程碑——互联网和万维网——代表了连接性截然不同的面貌。但它们也共享许多相同的功能。
连通性就意味着这一点。您正在连接到某个远程设备,例如服务器。你连接到它是因为上面有你需要或想要的东西。但是如何从 Linux 命令行将远程托管的资源检索到本地计算机?
1996 年,诞生了两个实用程序,可让您下载远程托管的资源。它们是 1 月份发布的 wget
和 12 月份发布的 cURL
。它们都在 Linux 命令行上运行。它们都连接到远程服务器,并且它们都为您检索内容。
但这不仅仅是 Linux 提供两个或更多工具来完成相同工作的常见情况。这些实用程序具有不同的目的和不同的专长。问题是,它们非常相似,以至于混淆了使用哪一个以及何时使用。
考虑两个外科医生。您可能不希望眼科医生为您进行心脏搭桥手术,也不希望心脏外科医生为您进行白内障手术。是的,他们都是高技能的医疗专业人员,但这并不意味着他们可以互相替代。
wget
和 cURL
也是如此。
wget 和 cURL 比较
wget
命令中的“w”表示其预期目的。它的主要目的是下载网页——甚至整个网站。它的 man
页面将其描述为使用 HTTP、HTTPS 和 FTP 协议从 Web 下载文件的实用程序。
相比之下,cURL
适用于 26 种协议,包括 SCP、SFTP、SMSB 以及 HTTPS。它的 man
页面说它是一种用于将数据传入或传出服务器的工具。它不是专门为与网站一起工作而量身定做的。它旨在使用它支持的众多互联网协议中的任何一种与远程服务器进行交互。
因此,wget
主要以网站为中心,而 cURL
是在更深层次上运行的东西,在普通互联网级别下。
wget
能够检索网页,它可以递归导航网络服务器上的整个目录结构以下载整个网站。它还能够调整检索到的页面中的链接,以便它们正确指向本地计算机上的网页,而不是远程网络服务器上的对应网页。
cURL
可让您与远程服务器进行交互。它可以上传文件以及检索它们。 cURL
适用于 SOCKS4 和 SOCKS5 代理,以及到代理的 HTTPS。支持GZIP、BROTLI、ZSTD格式压缩文件的自动解压。 cURL
还允许您并行下载多个传输。
它们之间的重叠是 wget
和 cURL
都可以让您检索网页并使用 FTP 服务器。
这只是一个粗略的指标,但您可以通过查看它们的 man
页面的长度来了解这两个工具的相关功能集。在我们的测试机上,wget
的手册页有 1433 行长。 cURL
的man
页面多达 5296 行。
快速浏览 wget
因为 wget
是 GNU 项目的一部分,所以您会发现它已预安装在所有 Linux 发行版中。使用它很简单,尤其是它最常见的用途:下载网页或文件。
只需将 wget
命令与网页或远程文件的 URL 一起使用。
wget https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc

该文件被检索并以其原始名称保存在您的计算机上。

要使用新名称保存文件,请使用 -O
(输出文档)选项。
wget -O word-file-test.doc https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc

检索到的文件以我们选择的名称保存。

检索网站时不要使用 -O
选项。如果这样做,所有检索到的文件都将附加到一个文件中。
要检索整个网站,请使用 -m
(镜像)选项和网站主页的 URL。您还需要使用 --page-requisites
来确保正确呈现网页所需的所有支持文件也已下载。 --convert-links
选项调整检索到的文件中的链接,以指向本地计算机上的正确目标,而不是网站上的外部位置。
快速浏览 cURL
cURL
是一个独立的开源项目。它预装在 Manjaro 21 和 Fedora 36 上,但必须安装在 Ubuntu 21.04 上。
这是在 Ubuntu 上安装 cURL
的命令。
sudo apt install curl

要下载与使用 wget
时相同的文件,并以相同的名称保存它,我们需要使用此命令。请注意,-o
(输出)选项对于 cURL
是小写的。
curl -o word-file-test.doc https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc

该文件已为我们下载。下载过程中会显示 ASCII 进度条。

要连接到 FTP 服务器并下载文件,请使用 -u
(用户)选项并提供用户名和密码对,如下所示:
curl -o test.png -u demo:password ftp://test.rebex.net/pub/example/KeyGenerator.png

这将从测试 FTP 服务器下载并重命名文件。

没有最好
要回答“我应该使用哪个”而不问“你想做什么?”是不可能的。
一旦您理解了 wget
和 cURL
的作用,您就会意识到它们并不是竞争。它们不满足相同的要求,也没有尝试提供相同的功能。
下载网页和网站是wget
的优势所在。如果那是您正在做的,请使用 wget
。对于其他任何事情(例如上传或使用众多其他协议中的任何一种),请使用 cURL
。