curl和wget有什么区别?[关闭]


38

这两个curlwget都用于下载文件等。是否有任何理由要使用另一个?


1
定义“正确使用”
AB

12
关于以意见为基础的闭幕式投票:询问两种工具之间的差异如何鼓励基于意见的答案?
Michael Martin-Smucker

1
@ MichaelMartin-Smucker“假设我需要下载一个网页,说www.google.com,我应该找wget还是curl?” 如果不是基于观点的那是什么?
muru 2015年

2
@muru,这取决于您“下载网页”的含义。如果您要发送http请求并接收结果,则curl是理想的选择。如果要下载页面,页面链接到的其他页面以及相关资产,curl将不起作用,而wget是唯一的选择。它们之间存在事实差异,因此这并非基于观点。
烧烤

3
@muru我想我们对问题背后的观点有不同的解释。在我的解释中,人们的看法是:“我听说过这两种工具似乎具有相同的作用。它们之间有什么区别,我何时应该选择一种呢?在这种情况下呢?” ...这对我来说似乎是一个合理的问题。
Michael Martin-Smucker 2015年

Answers:


33

定义“正确使用”后,请使用wget

为什么?这就是为什么:

递归!与curl相比,wget的主要优势在于它具有递归下载功能,甚至可以下载从远程资源引用的所有内容,无论是HTML页面还是FTP目录列表。


无耻从这里复制

curl

  • 图书馆curllibcurl–一个具有稳定API的跨平台库提供,每个人都可以使用。这种差异很重要,因为它在内部做事方式上产生了完全不同的态度。创建一个库也比“仅仅”命令行工具要难一些。

  • 管道curl它的工作方式更像传统的Unix cat命令,它将更多的内容发送到stdout,并stdin以“万事俱备”的方式读取更多内容。wget更像是cp使用相同的类似物。

  • 单发curl基本上是用于单次传输数据。它仅传输用户指定的URL,不包含任何递归下载逻辑或任何类型的HTML解析器。

  • 更多协议curl支持FTP,FTPS,Gopher,HTTP,HTTPS,SCP,SFTP,TFTP,TELNET,DICT,LDAP,LDAPS,FILE,POP3,IMAP,SMB / CIFS,SMTP,RTMP和RTSP。Wget仅支持HTTP,HTTPS和FTP。

  • 更便携curl可以在比Windows更多的平台上构建和运行wget。例如:OS / 400,TPF和其他非“直接” Unix克隆的“异国情调”平台。

  • 更多SSL库和SSL支持curl可以使用十一(11!)个不同的SSL / TLS库中的一个建立,并且它提供了更多控制权,并且对协议详细信息提供了更广泛的支持。curl支持公钥固定。

  • HTTP身份验证curl支持更多的HTTP身份验证方法,尤其是通过HTTP代理:Basic,Digest,NTLM和Negotiate

  • 袜子curl支持几种SOCKS协议版本的代理访问

  • 双向的curl提供上传和发送功能。wget仅提供纯HTTP POST支持。

  • HTTP多部分/表单数据发送,它允许用户执行HTTP“上载”并通常模拟浏览器并更广泛地执行HTTP自动化

  • curl支持gzip并扩大Content-Encoding并自动解压缩

  • curl 提供并执行对传输编码的HTTP的解压缩,而wget则不

  • curl 支持HTTP / 2,并且使用Happy Eyeballs进行双堆栈连接

  • 开发人员的活动更多。尽管可以对此进行辩论,但我在这里考虑了三个指标:邮件列表活动,源代码提交频率和发布频率。遵循这两个项目的任何人都可以看到curl项目在所有这些方面的步伐要高得多,而且已经超过10年了。在openhub上比较


wget

  • wget仅命令行。没有图书馆。

  • 递归wget与curl相比,它的主要优势是它具有递归下载功能,甚至可以下载从远程资源引用的所有内容,无论是HTML页面还是FTP目录列表。

  • 比较老wget可以追溯到1995年,而curl可以追溯到1996年底。

  • GPLwget是100%GPL v3。curl是MIT许可的产品。

  • GNUwget是GNU项目的一部分,所有版权均已分配给FSF。curl项目完全是独立的,并且是独立的,完全没有组织为生,而Daniel几乎拥有所有版权。

  • wget不需要额外的选项即可简单地将远程URL下载到本地文件,而curl需要-o-O

  • wget 支持用于处理cookie域的公共后缀列表,curl不支持。

  • wget 仅支持GnuTLS或OpenSSL以支持SSL / TLS

  • wget 仅支持基本身份验证作为通过HTTP代理的唯一身份验证类型

  • wget 没有SOCKS支持

  • 它从过早中断的传输中恢复并继续下载的能力无与伦比。

  • wget 只能使用qwerty键盘的左手输入!


1
是的,wget非常适合镜像!
joeytwiddle

1
“ curl项目完全是独立的,并且是独立的,没有任何组织可以为人父母,而Daniel几乎拥有所有版权。” 不知道那是一件坏事...
烧烤

它具有从过早中断的传输中恢复并继续下载的能力,这在卷曲方面无可匹敌。” 我理解这句话错了吗?不curl -C -继续中断下载吗?
任思远

1
为什么您推荐wget?即使查看您自己编写的比较结果,卷曲的声音也要优越得多。wget can be typed in using only the left hand on a qwerty keyboard!WTF ??wget requires no extra options to simply download a remote URL to a local file, while curl requires -o or -O.
Anmol Singh Jaggi

2
大小也很重要:在新的ubuntu图像上,wget大小为2M,而卷曲的为5M(包装,有deps,未打包的总x3)
Eran W

19

有许多可以下载喜欢的工具curlsnarfwgetpavukfgetfetchlftparia2HTTrack等用它按照您的要求和功能要与下载使用一起。检查功能表 并相应地使用。

卷曲度:

  • 卷曲支持更多协议FTP,FTPS,HTTP,HTTPS,SCP,SFTP,TFTP,TELNET,DICT,LDAP,LDAPS,FILE,POP3,IMAP,SMTP,RTMP和RTSP
  • 卷曲支持更多SSL库
  • Curl支持更多的HTTP身份验证方法,尤其是通过HTTP代理:Basic,Digest,NTLM和Negotiate
  • Curl由libcurl提供支持-一个具有稳定API的跨平台库,每个人都可以使用

Wget:

  • 虽然wget支持HTTP,HTTPS和FTP
  • Wget仅支持GnuTLS或OpenSSL以支持SSL / TLS
  • Wget仅支持基本身份验证作为通过HTTP代理的唯一身份验证类型
  • Wget仅是命令行工具,没有库。

有关更多信息的重要资源:


“ wget是命令行工具,只有它具有库。” 我不明白那条线。
Lucio 2015年

3

它们具有很多共同的功能,但是curl具有更多的选择。因为wget它偶尔可能足够浏览man wget,但是因为curl我需要在浏览器中研究此网页。我相信您的浏览器可以做的任何事情,curl也可以做到。


2

wget和curl之间还有另一个区别,我认为这很重要。

Wget是一个独立的命令行实用程序,主要用于快速,简单地检索Internet内容。

另一方面,Curl基本上是功能强大的libcurl库的终端前端。Libcurl提供了一套非常强大的工具来处理各种形式和风格的URL,并且几乎适用于所有语言和平台。Curl基本上使您能够在Shell脚本中使用此库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.