Linux curl与wget 命令的区别和联系

curl与wget相似之处:

wget 和 cURL 都可以下载内容。它们的核心就是这么设计的。它们都可以向互联网发送请求并返回请求项。这可以是文件、图片或者是其他诸如网站的原始 HTML 之类。

这两个程序都可以进行 HTTP POST 请求。这意味着它们都可以向网站发送数据,比如说填充表单什么的。

由于这两者都是命令行工具,它们都被设计成可脚本化。wget 和 cURL 都可以写进你的 Bash 脚本 ,自动与新内容交互,下载所需内容。

curl的优势:cURL是一个多功能工具。当然,它可以下载网络内容,但同时它也能做更多别的事情。

cURL 技术支持库是:libcurl。这就意味着你可以基于 cURL 编写整个程序,允许你基于 libcurl 库中编写图形环境的下载程序,访问它所有的功能。

cURL 宽泛的网络协议支持可能是其最大的卖点。cURL 支持访问 HTTP 和 HTTPS 协议,能够处理 FTP 传输。它支持 LDAP 协议,甚至支持 Samba 分享。实际上,你还可以用 cURL 收发邮件。

cURL 也有一些简洁的安全特性。cURL 支持安装许多 SSL/TLS 库,也支持通过网络代理访问,包括 SOCKS。这意味着,你可以越过 Tor 来使用cURL。

cURL 同样支持让数据发送变得更容易的 gzip 压缩技术。

wget的优势:wget 简单直接。这意味着你能享受它超凡的下载速度。wget 是一个独立的程序,无需额外的资源库,更不会做其范畴之外的事情。

wget 是专业的直接下载程序,支持递归下载。同时,它也允许你下载网页中或是 FTP 目录中的任何内容。

wget 拥有智能的默认设置。它规定了很多在常规浏览器里的事物处理方式,比如 cookies 和重定向,这都不需要额外的配置。可以说,wget 简直就是无需说明,开罐即食!

总结:

那你应该使用 cURL 还是使用 wget?这个比较得看实际用途。如果你想快速下载并且没有担心参数标识的需求,那你应该使用轻便有效的 wget。如果你想做一些更复杂的使用,直觉告诉你,你应该选择 cRUL。

cURL 支持你做很多事情。你可以把 cURL 想象成一个精简的命令行网页浏览器。它支持几乎你能想到的所有协议,可以交互访问几乎所有在线内容。唯一和浏览器不同的是,cURL 不会渲染接收到的相应信息。

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

非要说区别的话,curl由于可自定义各种请求参数所以在模拟web请求方面更擅长;wget由于支持ftp和Recursive所以在下载文件方面更擅长。类比的话curl是浏览器,而wget是迅雷9。

一、curl命令语法:

curl [options] [URL...]

二、curl命令参数详解:
由于linux curl功能十分强大,所以命令参数十分多,下表只是爱E族(aiezu.com)帅选出来的部分参数,更多参数请运行“man curl”命令查看。

参数组 参数 描述
url url 需要抓取的一到多个URLs;
多个下面通配符的方式:
1、http://{www,ftp,mail}.aiezu.com;
2、http://aiezu.com/images/[001-999].jpg;
3、http://aiezu.com/images/[1-999].html;
4、ftp://aiezu.com/file[a-z].txt


-H “name: value”
–header “name: value”
(HTTP)添加一个http header(http请求头);
-H “name:”
–header “name:”
(HTTP)移除一个http header(http请求头);
-A “string”
–user-agent “string”
【参考】
(HTTP)设置Http请求头“User-Agent”,服务器通过“User-Agent”可以判断客户端使用的浏览器名称和操作系统类型,伪造此参数能导致服务器做出错误判断。
也可以使用“-H”, “–header option”设置此选项;
-e <URL>
–referer <URL>
【参考】
(HTTP)设置访问时的来源页面,告诉http服务从哪个页面进入到此页面;
-e “aiezu.com”相当于“-H “Referer: www.qq.com””;


-I
–head
(HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)。
用于HTTP服务时,获取页面的http头;
(如:curl -I http://aiezu.com)
用于FTP/FILE时,将会获取文件大小、最后修改时间;
(如:curl -I file://test.txt)
-i
–include
(HTTP)输出HTTP头和返回内容;
-D <file>
–dump-header <file>
(HTTP)转储http响应头到指定文件;
cookie -b name=data
–cookie name=data
【参考】
(HTTP)发送cookie数据到HTTP服务器,数据格式为:”NAME1=VALUE1; NAME2=VALUE2″;

如果行中没有“=”,将把参数值当作cookie文件名;

这个cookie数据可以是由服务器的http响应头“Set-Cookie:”行发送过来的;

-c filename
–cookie-jar file name
【参考】
(HTTP)完成操作后将服务器返回的cookies保存到指定的文件;
指定参数值为“-”将定向到标准输出“如控制台”;
-j
–junk-session-cookies
(HTTP)告诉curl放弃所有的”session cookies”;
相当于重启浏览器;
代理 -x host:port
-x [protocol://[user:pwd@]host[:port]
–proxy [protocol://[user:pwd@]host[:port]
【参考】
使用HTTP代理访问;如果未指定端口,默认使用8080端口;
protocol默认为http_proxy,其他可能的值包括:
http_proxy、HTTPS_PROXY、socks4、socks4a、socks5;
如:
–proxy 8.8.8.8:8080;
-x “http_proxy://aiezu:123@aiezu.com:80”
-p
–proxytunnel
将“-x”参数的代理,作为通道的方式去代理非HTTP协议,如ftp;
–socks4 <host[:port]>
–socks4a <host[:port]>
–socks5 <host[:port]>
【参考】
使用SOCKS4代理;
使用SOCKS4A代理;
使用SOCKS5代理;
此参数会覆盖“-x”参数;
–proxy-anyauth
–proxy-basic
–proxy-diges
–proxy-negotiate
–proxy-ntlm
http代理认证方式,参考:
–anyauth
–basic
–diges
–negotiate
–ntlm
-U <user:password>
–proxy-user <user:password>
设置代理的用户名和密码;
数据
传输
-G
–get
【参考】
如果使用了此参数,“-d/”、“–data”、“–data-binary”参数设置的数据,讲附加在url上,以GET的方式请求;
-d @file
-d “string”
–data “string”
–data-ascii “string”
–data-binary “string”
–data-urlencode “string”
【参考】
(HTTP)使用HTTP POST方式发送“key/value对”数据,相当于浏览器表单属性(method=”POST”,enctype=”application/x-www-form-urlencoded”)
-d,–data:HTTP方式POST数据;
–data-ascii:HTTP方式POST ascii数据;
–data-binary:HTTP方式POST二进制数据;
–data-urlencode:HTTP方式POST数据(进行urlencode);
如果数据以“@”开头,后紧跟一个文件,将post文件内的内容;
-F name=@file
-F name=<file
-F name=content
–form name=content
【参考】
(HTTP)使用HTTP POST方式发送类似“表单字段”的多类型数据,相当于同时设置浏览器表单属性(method=”POST”,enctype=”multipart/form-data”),可以使用此参数上传二进制文件。

如果字段内容以“@”开头,剩下的部分应该是文件名,curl将会上传此文件,如:
curl -F “pic=@pic.jpg” http://aiezu.com;
curl -F “page=@a.html;type=text/html” http://aiezu.com
curl -F “page=@/tmp/a;filename=a.txt” http://aiezu.com

如果字段内容以“<”开头,剩下的部分应该是文件名,curl将从文件中获取作为此字段的值,如:curl -F “text=<text.txt” http://aiezu.com;

–form-string <key=value> (HTTP)类似于“–form”,但是“@”、“<”无特殊含义;
-T file
–upload-file file
通过“put”的方式将文件传输到远程网址;

选项参数只使用字符”-“,将通过stdin读入文件内容;
如:
cat test.txt|curl “http://aiezu.com/a.php” -T –
curl “http://aiezu.com/a.php” -T – <test.txt

此参数也可以使用通配符:
curl -T “{file1,file2}” http://aiezu.com
curl -T “img[1-1000].png” http://aiezu.com

断点
续传
-C <offset>
–continue-at <offset>
断点续转,从文件头的指定位置开始继续下载/上传;
offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;
-r <range>
–range <range>
(HTTP/FTP/SFTP/FILE) 只传输内容的指定部分:
0-499:最前面500字节;
-500:最后面500字节;
9500-:最前面9500字节;
0-0,-1:最前面和最后面的1字节;
100-199,500-599:两个100字节;
认证 –basic (HTTP)告诉curl使用HTTP Basic authentication(HTTP协议时),这是默认认证方式;
–ntlm (HTTP)使用NTLM身份验证方式,用于HTTP协议;
一般用于IIS使用NTLM的网站;
–digest (HTTP)使用HTTP Digest authentication加密,用于HTTP协议;
配合“-u/–user”选项,防止密码使用明文方式发送;
–negotiate (HTTP)使用GSS-Negotiate authentication方式,用于HTTP协议;
它主要目的是为它的主要目的是为kerberos5认证提供支持支持;
–anyauth (HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式;
-u user:password
–user user:password
使用用户名、密码认证,此参数会覆盖“-n”、“–netrc”和“–netrc-optional”选项;

如果你只提供用户名,curl将要求你输入密码;

如果你使用“SSPI”开启的curl库做“NTLM”认证,可以使用不含用户名密码的“-u:”选项,强制curl使用当前登录的用户名密码进行认证;

此参数相当于设置http头“Authorization:”;

证书 -E <证书[:密码]>
–cert <证书[:密码]>
(SSL)指定“PEM”格式的证书文件和证书密码;
–cert-type <type> (SSL)告诉curl所提供证书的类型:PEM、DER、ENG等;
默认为“PEM”;
–cacert <CA证书> (SSL)告诉curl所以指定的CA证书文件,必须是“PEM”格式;
–capath <CA证书路径> (SSL)告诉curl所以指定目录下的CA证书用来验证;
这些证书必须是“PEM”格式;
–crlfile <file> (HTTPS/FTPS)提供一个PEM格式的文件,用于指定被吊销的证书列表;
-k
–insecure
(SSL)设置此选项将允许使用无证书的不安全SSL进行连接和传输。
SSL
其他
–ciphers <list of ciphers> (SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”;
–engine <name> 设置一个OpenSSL加密引擎用于加密操作;
使用“curl –engine list”查看支持的加密引擎列表;
–random-file (SSL)指定包含随机数据的文件路径名;数据是用来为SSL连接产生随机种子为;
–egd-file <file> (SSL)为随机种子生成器EGD(Entropy Gathering Daemon socket)指定的路径名;
-1/–tlsv1
–tlsv1.0
–tlsv1.1
–tlsv1.2
-2/–sslv2
-3/–sslv3
(SSL)使用TLS版本2与远程服务器通讯;
(SSL)使用TLS 1.0版本与远程服务器通讯;
(SSL)使用TLS 1.1版本与远程服务器通讯;
(SSL)使用TLS 1.2版本与远程服务器通讯;
(SSL)使用SSL版本2与远程服务器通讯;
(SSL)使用SSL版本3与远程服务器通讯;
私钥
公钥
–key <key> (SSL/SSH)指定一个私钥文件名;为指定时自动尝试使用下面文件:“~/.ssh/id_rsa”、“~/.ssh/id_dsa”、“./id_rsa’”、 “./id_dsa”;
–key-type <type> (SSL)指定私钥文件类型,支持:DER、PEM、ENG,默认是PEM;
–pass <phrase> (SSL/SSH)指定私钥文件的密码;
–pubkey <key> (SSH)使用指定文件提供的您公钥;
FTP -P
–ftp-port <接口>
(FTP)FTP主动模式时,设置一个地址等待服务器的连接,如:
网卡:eth1
IP:8.8.8.8
主机名:aiezu.com
可以加端口号:eth1:20000-21000;
–crlf (FTP)上传时将换行符(LF)转换为回车换行(CRLF);
–ftp-account [data] (FTP)ftp帐号信息;
–ftp-method [method] (FTP)可选值:multicwd/nocwd/singlecwd;
–ftp-pasv (FTP)使用使用PASV(被动)/EPSV模式;
–ftp-skip-pasv-ip (FTP)使用PASV的时,跳过指定IP;
–ftp-create-dirs (FTP)上传时自动创建远程目录;
-l
–list-only
(FTP)列出ftp文件列表;
-B
–use-ascii
(FTP/LDAP)使用Ascii传输模式,用于FTP、LDAP;在ftp中相当与使用了“type=A;”模式。
–disable-epsv (FTP)告诉curl在PASV(被动模式)时不要使用EPSV;
–disable-eprt (FTP)告诉curl在主动模式时禁用EPRT和LPRT;
限速 –limit-rate <speed> 限制curl使用的最大带宽;如果未指定单位,默认单位为“bytes/秒”,你也可以指定单位为“K”、“M”、“G”等单位,如:“–limit-rate 1m”为限制最大使用带宽为“1m字节/秒”;
-y
–speed-time <time>
If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will be 1 unless set with -Y.
This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the –connect-timeout option.
-Y
–speed-limit <speed>
If a download is slower than this given speed (in bytes per second) for speed-time seconds it gets aborted. speed-time is set with -y and is 30 if not set.
其他
选项
-0/–http1.0 (HTTP) 强制curl使用HTTP 1.0而不是使用默认的HTTP 1.1;
–interface <name> 使用指定的网卡接口访问;
curl –interface eth0 http://aiezu.com
curl –interface 10.0.0.101 http://aiezu.com
-X <command>
–request <command>
(HTTP)指定与服务器通信使用的请求方法,如:GET、PUT、POST、DELETE等,默认GET;
–keepalive-time <seconds> 设置keepalive时间
–no-keepalive 关闭keepalive功能;
–no-buffer 禁用对输出流缓冲;
–buffer 启用输出流缓冲;
-L
–location
(HTTP/HTTPS)追随http响应头“Location:”定向到跳转后的页面;
(在http响应码为3XX时使用,如301跳转、302跳转)
–location-trusted (HTTP/HTTPS)同“–location”,但跳转后会发送跳转前的用户名和密码;
–compressed (HTTP)请求对返回内容使用压缩算法进行压缩;curl支持对gzip压缩进行解压;
–connect-timeout <seconds> 指定最大连接超时,单位“秒”;
-m seconds
–max-time seconds
限制整个curl操作的最长时间,单位为秒;
-s
–silent
安静模式。不要显示进度表或错误消息;
-#
–progress-bar
显示进度条;
错误
选项
-f
–fail
(HTTP)连接失败时(400以上错误)不返回默认错误页面,而是返回一个curl错误码“22”;
–retry <num>
–retry-delay <seconds>
–retry-max-time <seconds>
失败重试次数;
重试间隔时间;
最大重试时间;
-S
–show-error
安静模式下显示错误信息;
–stderr <file> 错误信息保存文件;
输出 -o file
–output file
将返回内容输出到文件。
如果是用过通配符获取多个url,可以使用“#”后跟“数字序号”,curl会自动将它替换对应的关键词,如:
curl “http://aiezu.com/{a,b}.txt” -o “#1.txt”;
将保存为:“a.txt”,“b.txt”;curl “http://aiezu.com/{a,b}_[1-3].txt” -o “#1#2.txt”;
将保存为:a1.txt、a2.txt、a3.txt、b1.txt、b2.txt、b3.txt如果要根据规则创建保存目录,参考:“–create-dirs”

指定“-”将定向到标准输出“如控制台”;

-O
–remote-name
将返回内容输出到当前目录下,和url中文件名相同的文件中(不含目录);
–create-dirs 与“-o”参数配合使用,创建必要的本地目录层次结构
-w
–write-out format
操作完成后在返回信息尾部追加指定的内容;要追加的内容可以是一个字符串“string”、从文件中获取“@filename”、从标准输入中获取“@-”

格式参数中可以用%{variable_name} 方式使用响应信息的相关变量,如:%{content_type}、%{http_code}、%{local_ip}…,更多变量参考“man curl”获取;

格式参数可以使用“\n”、“\r”、“\t”等转义字符;

调试 –trace <file> 转储所有传入和传出的数据到文件,包括描述信息;
使用“-”作为文件名将输出发送到标准输出。
–trace-ascii file 转储所有传入和传出的数据到文件,包括描述信息,只转储ASCII部分,更容易阅读;
使用“-”作为文件名将输出发送到标准输出。
这个选项会覆盖之前使用的-v、 –verbose、 –trace-ascii选项;
–trace-time 转储文件中添加时间信息;
-K
–config <config file>
从配置文件中读取参数,参考:http://curl.haxx.se/docs/
-v
–verbose
显示更详细的信息,调试时使用;
帮助 -M
–manual
显示完整的帮助手册;
-h
–help
linux curl用法帮助;

1. 下载文件

curl -O http://man.linuxde.net/text.iso                    #O大写,不用O只是打印内容不会下载
wget http://www.linuxde.net/text.iso                       #不用参数,直接下载文件

 

2. 下载文件并重命名

curl -o rename.iso http://man.linuxde.net/text.iso         #o小写
wget -O rename.zip http://www.linuxde.net/text.iso         #O大写

wget no-check-certificate -O 111.sh https://ghproxy.com/https://raw.githubusercontent.com/jacyl4/de_GWD/main/client

3. 断点续传

curl -O -C - http://man.linuxde.net/text.iso               #O大写,C大写
wget -c http://www.linuxde.net/text.iso                    #c小写

 

4. 限速下载

curl --limit-rate 50k -O http://man.linuxde.net/text.iso
wget --limit-rate=50k http://www.linuxde.net/text.iso

 

5. 显示响应头部信息

curl -I http://man.linuxde.net/text.iso
wget --server-response http://www.linuxde.net/test.iso

 

6. 同时打印请求头和响应头

curl -v http://man.linuxde.net/text.iso
curl http://man.linuxde.net/text.iso --trace-ascii /dev/stdout
wget -d http://www.linuxde.net/test.iso

 

7. wget利器–打包下载网站

wget --mirror -p --convert-links -P /var/www/html http://man.linuxde.net/

————————————————————分界线——————————————————

wget是个专职的下载利器,简单,专一,极致;而curl可以下载,但是长项不在于下载,而在于模拟提交web数据,POST/GET请求,调试网页,等等。

在下载上,也各有所长,wget可以递归,支持断点;而curl支持URL中加入变量,因此可以批量下载。

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:按照服务器上的文件名,存在本地

–l,–head:仅返回头部信息

-u,–user[user:pass]:设置http认证用户和密码

-T,–upload-file:上传文件

-e,–referer:指定引用地址

-x,–proxy:指定代理服务器地址和端口

-w,–write-out:输出指定格式内容

–retry:重试次数

–connect-timeout:指定尝试连接的最大时间/s

wget(文件下载工具)

常用参数如下:

1、 启动参数

-V,–version:显示版本号

-h,–help:查看帮助

-b,–background:启动后转入后台执行

2、 日志记录和输入文件参数

-o,–output-file=file:把记录写到file文件中

-a,–append-output=file:把记录追加到file文件中

-i,–input-file=file:从file读取url来下载

3、 下载参数

-bind-address=address:指定本地使用地址

-t,-tries=number:设置最大尝试连接次数

-c,-continue:接着下载没有下载完的文件

-O,-output-document=file:将下载内容写入到file文件中

-spider:不下载文件

-T,-timeout=sec:设置响应超时时间

-w,-wait=sec:两次尝试之间间隔时间

–limit-rate=rate:限制下载速率

-progress=type:设置进度条

4、目录参数

-P,-directory-prefix=prefix:将文件保存到指定目录

5、 HTTP参数

-http-user=user:设置http用户名

-http-passwd=pass:设置http密码

-U,–user-agent=agent:伪装代理

-no-http-keep-alive:关闭http活动链接,变成永久链接

-cookies=off:不使用cookies

-load-cookies=file:在开始会话前从file文件加载cookies

-save-cookies=file:在会话结束将cookies保存到file文件

6、 FTP参数

-passive-ftp:默认值,使用被动模式

-active-ftp:使用主动模式

7、 递归下载排除参数

-A,–accept=list:分号分割被下载扩展名的列表

-R,–reject=list:分号分割不被下载扩展名的列表

-D,–domains=list:分号分割被下载域的列表

–exclude-domains=list:分号分割不被下载域的列表

CURL命令
1、列出ftp服务器上的目录列表:
curl ftp://www.xxx.com/ –user name:passwd
curl ftp://www.xxx.com/ –u name:passwd #简洁写法
curl ftp://name:passwd@www.xxx.com #简洁写法2

2、只列出目录,不显示进度条
curl ftp://www.xxx.com –u name:passwd -s

3、下载一个文件:
curl ftp://www.xxx.com/size.zip –u name:passwd -o size.zip

4、上载一个文件:
curl –u name:passwd -T size.mp3 ftp://www.xxx.com/mp3/

5、从服务器上删除文件(使用curl传递ftp协议的DELE命令):
curl –u name:passwd ftp://www.xxx.com/ -X ‘DELE mp3/size.mp3’

6、另外curl不支持递归下载,不过可以用数组方式下载文件,比如我们要下载1-10.gif连续命名的文件:
curl –u name:passwd ftp://www.xxx.com/img/[1-10].gif –O #O字母大写

7、要连续下载多个文件:

=================实例:====================

命令:

1
wget -k -p -nH -N http://www.baidu.com

2、wget -r -p -np -k https://openwrt.proxy.ustclug.org/snapshots/packages/i386_pentium4/

-k 把已下载文件中的所有链接都转换为本地引用,不在依赖原始或在线内容

-p  下载所有必要文件,确保离线可用,包括图片和样式表

-nH 禁止把文件下载到以主机名为前缀的文件夹中。

-N 启用文件的时间戳,以匹配来源的时间戳.

-r –recursive(递归) specify recursive download.(指定递归下载)
-k –convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接)
-p –page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容)
-np –no-parent(不追溯至父级) don’t ascend to the parent directory.

这里写代码片额外参数:

-nc 断点续传
-o 生成日志文件

示例一:对方网站使用referer防盗链的情况,需要伪造来路来破解防盗链,然后下载目标文件(下面是抓取某个站2015文件夹下所有图片)

1
wget -E –referer http://example.com/ -r -m -k http://img.example.com/2015/

参数:
-r 递归:对于HTTP主机,wget首先下载URL指定的文件,然后(如果该文件是一个HTML文档的话)递归下载该文件所引用(超级连接)的所有文件(递归深度由参数-l指定);对FTP主机,该参数意味着要下载URL指定的目录中的所有文件,递归方法与HTTP主机类似
-m 镜像:相当于同时使用-r和-N参数
-k 连接转换为本地相对链接
-N 时间戳:该参数指定wget只下载更新的文件,也就是说,与本地目录中的对应文件的长度和最后修改日期一样的文件将不被下载
简单来说基本的用法如下,根据需求添加参数

1
wget -E –referer http://伪造来路网址/ http://目标网址/要下载的东西

防盗链做法:referer防盗链太简单,只能防君子,如何反制?采用token方式防盗链,对下载链接、图片链接加参数引用,需要改程序来支持。

示例二:无防盗链的情况

1
wget -r -p -np -k http://xxx.com/xxx/

参数:
-r 递归
-p –page-requisites(页面必需元素)
-np –no-parent(不追溯至父级)
-k 连接转换为本地相对链接

示例三:

1
wget -r -np -nd http://example.com/packages/

这条命令可以下载 http://example.com 网站上 packages 目录中的所有文件
参数:
-np 的作用是不遍历父目录
-nd 表示不在本机重新创建目录结构

再添加排除某些文件或指定下载的文件类型的参数后是这样的

1
wget -r -np -nd –accept=iso http://example.com/centos-5/i386/

与上一条命令相似,但多加了一个 –accept=iso 选项,这指示 wget 仅下载 i386
目录中所有扩展名为 iso 的文件。你也可以指定多个扩展名,只需用逗号分隔即可
参数:
–accept=LIST 可以接受的文件类型
–reject=LIST 拒绝接受的文件类型

示例四:直接

1
wget -m -k (-H) http://www.example.com/

该命令可用来镜像一个网站,wget 将对链接进行转换。
如果网站中的图像是放在另外的站点,那么可以使用
参数:
-m 镜像:相当于同时使用-r和-N参数
-k 连接转换为本地相对链接
-H 可以目标站主机以外的主机内容,图片单独存放在一个主机上的情况

1、使用wget下载单个文件

以下的例子是从网络下载一个文件并保存在当前目录

wget http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。

2、使用wget -O下载并以不同的文件名保存

wget默认会以最后一个符合”/”的后面的字符来命令,对于动态链接的下载通常文件名会不正确。

错误:下面的例子会下载一个文件并以名称download.php?id=1080保存

wget http://www.centos.bz/download?id=1

即使下载的文件是zip格式,它仍然以download.php?id=1080命令。

正确:为了解决这个问题,我们可以使用参数-O来指定一个文件名:

wget -O wordpress.zip http://www.centos.bz/download.php?id=1080

3、使用wget –limit -rate限速下载

当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。

wget –limit-rate=300k http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

4、使用wget -c断点续传

使用wget -c重新启动下载中断的文件:

wget -c http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。

5、使用wget -b后台下载

对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载。

wget -b http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

Continuing in background, pid 1840.

Output will be written to `wget-log’.

你可以使用以下命令来察看下载进度

tail -f wget-log

6、伪装代理名称下载

有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过–user-agent参数伪装。

wget –user-agent=”Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16″ 下载链接

7、使用wget –spider测试下载链接

当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加–spider参数进行检查。

wget –spider URL

如果下载链接正确,将会显示

wget –spider URL

Spider mode enabled. Check if remote file exists.

HTTP request sent, awaiting response… 200 OK

Length: unspecified [text/html]

Remote file exists and could contain further links,

but recursion is disabled — not retrieving.

这保证了下载能在预定的时间进行,但当你给错了一个链接,将会显示如下错误

wget –spider url

Spider mode enabled. Check if remote file exists.

HTTP request sent, awaiting response… 404 Not Found

Remote file does not exist — broken link!!!

你可以在以下几种情况下使用spider参数:

定时下载之前进行检查

间隔检测网站是否可用

检查网站页面的死链接

8、使用wget –tries增加重试次数

如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用–tries增加重试次数。

wget –tries=40 URL

9、使用wget -i下载多个文件

首先,保存一份下载链接文件

cat > filelist.txt

url1

url2

url3

url4

接着使用这个文件和参数-i下载

wget -i filelist.txt

10、使用wget –mirror镜像网站

下面的例子是下载整个网站到本地。

wget –mirror -p –convert-links -P ./LOCAL URL

–miror:开户镜像下载

-p:下载所有为了html页面显示正常的文件

–convert-links:下载后,转换成本地的链接

-P ./LOCAL:保存所有文件和目录到本地指定目录

11、使用wget –reject过滤指定格式下载

你想下载一个网站,但你不希望下载图片,你可以使用以下命令。

wget –reject=gif url

12、使用wget -o把下载信息存入日志文件

你不希望下载信息直接显示在终端而是在一个日志文件,可以使用以下命令:

wget -o download.log URL

13、使用wget -Q限制总下载文件大小

当你想要下载的文件超过5M而退出下载,你可以使用以下命令:

wget -Q5m -i filelist.txt

注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。

14、使用wget -r -A下载指定格式文件

可以在以下情况使用该功能

下载一个网站的所有图片

下载一个网站的所有视频

下载一个网站的所有PDF文件

wget -r -A.pdf url

15、使用wget FTP下载

你可以使用wget来完成ftp链接的下载。

使用wget匿名ftp下载

wget ftp-url

使用wget用户名和密码认证的ftp下载

wget –ftp-user=USERNAME –ftp-password=PASSWORD url