【译】curl vs Wget

本文是curl和Wget主要区别之我(Daniel Stenberg,原文作者)见。可能会有些偏心向curl,毕竟curl于我像子女一样,但是我也同样推荐Wget。

... ...

共性

  • 都是可以从FTP、HTTP、HTTPS下载内容的命令行工具
  • 都可以发送HTTP POST请求
  • 都支持HTTP cookies
  • 都被设计为工作中无需用户干涉——像内置脚本一样
  • 都是完全开源免费的
  • 都是90年代的项目
  • 都支持metalink

差异

curl:

  • 库。curl由libcurl——一个API稳定且使用自由的跨平台库技术支持。这个主要的差别使二者产生了完全不同的内部体系。当然制作库也是比一个“单纯的”命令行工具要稍微难一点的。
  • 管道。curl工作起来更像是传统unix的cat命令,基于“万事无不管道”的态度它向stdout发送更多信息,从stdin读取更多。Wget类比起来则更像cp命令。
  • 单次性。curl本质上是做单次数据转移的。它只转移用户指定的URLs,并不包括任何递归的下载逻辑或是各种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,curl可构建和运行在更多平台上。举个栗子:OS/400,TPS和其他非直系unix拷贝的“外来”平台。
  • 更多的SSL库和SSL支持。curl可以用11种(11种!)不同的SSL/TLS库来构建,并且为协议细节提供了更多控制权和尽可能的支持。
  • HTTP认证。curl支持更多HTTP认证的方法,尤其是HTTP代理:Basic、Digest、NTLM和Negotiate。
  • SOCKS。curl支持好几个版本SOCKS协议的代理访问。
  • 双向性。curl可以提供上传和发送的能力。Wget只能提供简单的HTTP POST支持。
  • HTTP多部分/格式数据的发送,这允许用户在一般的模拟浏览器中进行HTTP“上传”以及进行HTTP自动化来扩展内容。
  • curl支持gzip以及压缩内容编码,并且会自动解压。
  • curl提供并且压缩传输编码的HTTP,wget则不。
  • curl支持HTTP/2并且使用Happy Eyeballs[1]进行双栈连接。
  • 更活跃的开发者。这可能会引发讨论,我基于如下三点考虑:邮件列表活跃度、源代码提交频次以及发布频次。任何跟进这两个项目的人都可以注意到curl在这三点均有着更高的数据,并且已经保持了10年以上。在openhub上比较

Wget

  • Wget仅仅是命令行工具而非库。
  • 递归性!Wget相对于curl而言主要的强势之处在于它可以递归下载,或是下载在远程资源中提到的任何资源,无论是一个HTML页面还是一个FTP目录列表。
  • 更老的资历。Wget可以追溯的1995年,而curl不会早于1996年末。
  • GPL。Wget是GPL第三版协议。curl是MIT许可。
  • GNU。Wget是GNU计划的一部分,版权指定为FSF。curl项目则完全独立并且脱离于任何父级组织,几乎所有版权被Daniel所有。
  • Wget不需要额外的指令选项去下载远程的URL至本地文件,curl需要 -o或者 -O。
  • Wget的SSL/TLS支持仅有GnuTLS或者OpenSSL。
  • Wget仅支持Basic认证作为唯一的HTTP代理。
  • Wget没有SOCKS支持。
  • 可以从提前中断的传输中回复并且继续下载,curl则没有对应的功能。
  • Wget默认开启更多设置:cookies、重定向跟随、远程资源的时间戳等。curl的大多数这些设置需要单独开启。
  • Wget四个字母在传统键盘上仅用左手就能输入!

其他的

有人说我应当与wput比较上传能力,但那是一个单独的工具/项目了,不纳入这次比较。

其他的两个有类似功能的好用工具有aria2和axel(已天坑?)试试吧!

更严格的特性比较(也包含了其他相似的工具),请见curl比较表

感谢

帮助反馈和改进:Micah Cowan, Olemis Lang

最近更新:2016.4.11 22:47(中欧,斯德哥尔摩)

[1]Happy Eyeballs (also called Fast Fallback) is an algorithm published by the IETF which can make dual-stack applications (those that understand both IPv4 and IPv6) more responsive to users, avoiding the usual problems faced by users with imperfect IPv6 connections or setups.

https://en.wikipedia.org/wiki/Happy_Eyeballs

原文:https://daniel.haxx.se/docs/curl-vs-wget.html

译者:仅为了解curl和wget差别而译,个中涉及到的具体知识并不了解,有错之处请不吝指正。

时间: 2024-11-06 22:18:16

【译】curl vs Wget的相关文章

Linux学习:curl 与 wget命令

curl和wget命令都是Linux下的工具,可以用来下载文件. 一.wget 例1: wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip 下载文件保存到当前目录,文件名默认是url最后一个/后面的内容,这里就是 wordpress-3.1-zh_CN.zip 例2: wget -O myfile  http://www.minjieren.com/wordpress-3.1-zh_CN.zip 通过-O参数,可以指定文件名,这里指定的是m

curl和wget的区别和使用

curl和wget基础功能有诸多重叠,如下载等. 在高级用途上的curl由于可自定义各种请求参数所以长于模拟web请求,用于测试网页交互(浏览器):wget由于支持ftp和Recursive所以长于下载,用于下载文件(迅雷). 1.下载文件 curl -O http://man.linuxde.net/text.iso #O大写,不用O只是打印内容不会下载wget http://www.linuxde.net/text.iso #不用参数,直接下载文件 2.下载文件并重命名 curl -o re

Shell 命令 curl 和 wget 使用代理采集网页的总结大全

Linux Shell 提供两个非常实用的命令来爬取网页,它们分别是 curl 和 wget 米扑代理,作为大数据分析研究的基础服务,对其做了深入的研究和总结. curl 和 wget 使用代理 curl 支持 http.https.socks4.socks5 wget 支持 http.https Shell curl wget 示例 #!/bin/bash # # curl 支持 http.https.socks4.socks5 # wget 支持 http.https # # 米扑代理示例:

linux工具之curl与wget高级使用

1.curl(文件传输工具) 常用参数如下: -c,--cookie-jar:将cookie写入到文件 -b,--cookie:从文件中读取cookie -C,--continue-at:断点续传 -d,--data:http post方式传送数据 -D,--dump-header:把header信息写入到文件 -F,--from:模拟http表达提交数据 -s,--slient:减少输出信息 -o,--output:将信息输出到文件 -O,--remote-name:按照服务器上的文件名,存在

linux命令之curl,wget

curl由于可自定义各种请求参数所以在模拟web请求调试网页方面更擅长:wget由于支持ftp和Recursive所以在下载文件方面更擅长.类比的话curl是浏览器,而wget是迅雷9. 在下载上,也各有所长,wget可以递归,支持断点:而curl支持URL中加入变量,因此可以批量下载. 个人用途上,我经常用wget来下载文件,加 -c选项不怕断网:使用curl 来跟网站的API 交互,简便清晰. 1.下载文件 curl -O http://man.linuxde.net/text.iso #O

curl和wget下载文件

curl -v "http:// 123.mp4"请求文件下载,显示加载过程curl -v --header "Range: bytes=7405568-" -v http:// 123.mp4请求文件下载,请求头描述文件起始范围wget "http:// 123.mp4"查看下载过程,包含请求头,返回信息等 原文地址:https://blog.51cto.com/dvbxiaoduan/2386641

wget和curl中使用代理

命令使用代理 wget/curl 都支持使用代理 wget -e "http_proxy=10.1.4.43:8080″  proxy.mimvp.com curl -x 10.1.4.43:8080 proxy.mimvp.com 环境变量使用代理 curl.wget也支持通过环境变量http_proxy来设置要使用的代理服务器, 如下: # 这个帐号使用的代理服务器http_proxy="http://mycache.mydomain.com:3128″export http_pr

Linux 抓取网页方式(curl+wget)

Linux抓取网页,简单方法是直接通过 curl 或 wget 两种命令. curl 和 wget支持协议 curl  支持 http,https,ftp,ftps,scp,telnet等网络协议 wget支持 http,https,ftp网络协议 curl 和 wget抓取实例 抓取网页,主要有url 网址和proxy代理两种方式 1. url 网址方式抓取 (1)curl下载百度首页内容,保存在baidu_html文件中 curl  http://www.baidu.com/  -o  ba

curl 重定向问题

今天在curl一个网站的时候遇到一个奇怪的问题,下面是输出: [email protected]:~$ curl -L http://www.yngs.gov.cn/ -v * Hostname was NOT found in DNS cache * Trying 116.52.12.163… * Connected to www.yngs.gov.cn (116.52.12.163) port 80 (#0) GET / HTTP/1.1 User-Agent: curl/7.38.0 Ho