Curlvs Wget
这两个命令做什么
- 都是可以从FTP,HTTP和HTTPS下载内容的命令行工具
- 都可以发送HTTP POST请求
- 都支持HTTP cookie
- 两者都被设计为在没有用户交互的情况下工作,就像在脚本内部一样
- 两者都是完全开源的和免费的软件
- 这两个项目都是在90年代开始的
- 同时支持metalink
他们有什么不同
curl
- 库。curl由libcurl提供支持- 一个跨平台的库,具有稳定的API,可供每个人使用。这种差异是重大的,因为它在内部做事情时形成了完全不同的态度。制作一个库比“单纯的”命令行工具稍微难一些。
- 管道。curl更像传统的unix cat命令,它向stdout发送更多的东西,并且在“一切都是管道”的方式下从stdin中读取更多内容。Wget更像是cp,使用相同的模拟。
- 单次拍摄。卷曲基本上是做单点数据传输。它只传输用户指定的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。
- 便携。卷曲构建并运行在比wget更多的平台上。例如:OS / 400,TPF和其他更“异国”的平台,不是直接unix克隆。
- 更多的SSL库和SSL支持。curl可以用11个不同的SSL / TLS库中的一个构建,并且它提供了更多的控制和更广泛的协议细节支持。
- HTTP认证。curl支持更多的HTTP身份验证方法,特别是HTTP代理:Basic,Digest,NTLM和Negotiate
- SOCKS代理。curl支持代理访问的几个SOCKS协议版本
- 双向。curl提供上传和发送功能。Wget只提供普通的HTTP POST支持。
- HTTP多部分/表单数据发送,它允许用户进行HTTP“上传”,并在一般模拟浏览器,并在更广泛的范围内进行HTTP自动化
- curl支持gzip和def-content-Encoding并且自动解压缩
- curl提供并执行Transfer-Encoded HTTP的解压缩,wget不支持。
- curl支持HTTP / 2,它使用Happy Eyeballs进行双栈连接
- 更活跃的开发者活动。虽然这可以辩驳,但我在这里考虑三个指标:邮件列表活动,源代码提交频率和发布频率。在这两个项目之后的任何人都可以看到,卷曲项目在所有这些领域都有很高的速度,已经超过了10年以上。在openhub上比较
wget的
- wget只是命令行,没有库。
- 递归。与curl相比,Wget的主要优势在于能够递归下载,甚至可以下载从远程资源引用的所有内容,无论是HTML页面还是FTP目录列表。
- 时长。wget追溯到 1995年,而curl可以追溯到1996年底 。
- GPL。wget是100%GPL v3。curl是MIT许可。
- GNU。wget是GNU项目的一部分,所有版权都分配给 FSF。卷曲项目完全是独立的,独立的,没有任何组织管理,几乎所有丹尼尔拥有的版权 。
- wget 不需要额外的选项来简单地将远程URL下载到本地文件,而curl则需要添加-o或-O选项。
- wget仅支持用于SSL / TLS支持的GnuTLS或OpenSSL
- wget仅支持基本身份验证作为通过HTTP代理的唯一身份验证类型
- wget不支持SOCKS
- 它能够恢复传输中断的连接并继续下载没有对应的部分。
- wget默认启用了更多的功能:cookies,重定向跟踪,从远程资源中加时间等。通过curl,大多数这些功能都需要明确地启用。
- wget只能在qwerty键盘上使用左手键入!(请看wget四个字母的位置)
额外的东西
有些人认为我应该将上传能力与wput进行比较 ,但这是一个单独的工具/项目,在这个比较中我没有包括这一点。
另外两个功能相似的功能强大的工具包括 aria2和 axel(dead project?) - 试用一下吧!
对于功能比较更严格的功能(也比较其他类似工具),请参阅curl比较表
该文章转载并翻译于:https://daniel.haxx.se/docs/curl-vs-wget.html
感谢原作者Daniel Stenberg,也是curl命令的开源作者,同时也是一位技术大牛。在我表达想要转载此文章后,给与我的鼓励。其中有翻译有任何的错误欢迎留言或者私信指出。