wget 和scp对比_curl 和Wget功能比较

用过Linux和命令行的人可能都知道Wget和Curl,很多码农可能都用Curl写过程序,但是要说两者的区别可能很多人说不上了。本文我们对两者进行一个比较。

wget 和scp对比_curl 和Wget功能比较_第1张图片

共同点

两者都是命令行工具,可以从FTP,HTTP和HTTPS下载内容。

两者都可以发送HTTP,POST请求。

都支持HTTP cookie。

两者都设计为无需用户交互即可工作。

两者都是完全开源和免费的软件。

这两个项目恰好都诞生在上世纪90年代。

都支持metalink。

功能差异

Curl优势

library:curl底层由libcurl提供支持。libcurl是一个具有稳定API的跨平台库,可以被其他工具和语言调用,所以Curl具有很强大编程性质,由很多语言的打包,很多语言的HTTP(S)功能(比如PHP)都是由libcurl提供。

管道:curl的工作方式更像传统的Unix cat命令,它将更多的内容发送到stdout,并且从stdin中读取更多内容。Wget行为更像是cp命令。

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

支持更多协议:Curl支持FTP(S),Gopher,HTTP(S),SCP,SFTP,TFTP,TELNET,DICT,LDAP(S),MQTT,FILE,POP3(S),IMAP(S),SMB/CIFS,SMTP(S),RTMP和RTSP。而Wget仅仅支持HTTP(S)和FTP。

更具可移植性:Curl可以在wget之外的更多平台上构建和运行。例如:OS/400,TPF和其他Unix系OS。

更多的SSL库和SSL支持:curl可以使用十三个不同的SSL/TLS库之一来构建,它可以提供更多控制权并更广泛地支持协议详细信息。

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

SOCKS:curl支持SOCKS4和SOCKS5用于代理访问。使用基于本地或代理的名称解析。

双向交互:curl提供上传和发送功能。Wget仅提供简单的HTTP POST支持。

HTTP多部分/表单数据发送,它允许用户执行HTTP"上载"并通常模拟浏览器并在更大范围内执行HTTP自动化。

curl支持gzip,brotli,zstd和deflate Content-Encoding并可以自动解压缩。

curl提供并执行对Transfer-Encoded HTTP的解压缩,而wget不支持。

curl支持HTTP/2,HTTP/3,Alt-svc,并且使用Happy Eyeballs进行双堆栈连接。

curl支持并发传输(-Z)。

curl开发社区更活跃,openhub上对两个项目的对比:

wget 和scp对比_curl 和Wget功能比较_第2张图片

curl在macOS和Windows 10上预装的。Wget需要自己手动安装。

Wget优势

Wget仅是命令行工具,不提供类库。

递归下载:与curl相比,Wget的主要优势在于它具有递归下载功能,甚至可以递归下载资源引用的所有内容,包括HTML页面链接,以及FTP目录列表。

历史年代:Wget的历史可以追溯到1995年,而Curl可以追溯到1996年底 。

GPL:Wget的软件协议遵循GPL v3。curl是MIT协议。

GNU:Wget是GNU项目的一部分,所有权利归FSF 自由软件基金会。Curl项目完全是独立的的个人项目,所有权利归创始人Daniel。

Wget不需要其他选项即可简单地将远程URL下载到本地文件,而curl需要-o或-O。

Wget仅支持GnuTLS或OpenSSL以支持SSL/TLS。

Wget仅支持基本HTTP身份验证唯一的身份验证类型。

Wget不支持SOCKS。

Wget具有很强大的断点续传功能。

Wget默认启用更多功能:Cookie,重定向,远程资源的时间戳等等。在Curl下,大多数这些功能都需要用命令行显式开启。

总结

两者对比Curl更具有编程性,更适合开发用,而Wget的下载功能更强。近年来,致力于用Wget2替换wget。具有相似功能集的其他两个功能强大的工具还包括aria2和axel(已经好久未更新项目),更详细的功能对比,可参考Curl官方的功能对比。

wget 和scp对比_curl 和Wget功能比较_第3张图片

wget 和scp对比_curl 和Wget功能比较_第4张图片

你可能感兴趣的:(wget,和scp对比)