Wget下载工具

作为一款Linux下著名的文件下载工具–Wget,它的轻巧便捷及强大的功能可以与大多数下载工具相媲美.支持 HTTP,HTTPS,FTP协议, 也可以使用代理,断点续传…

正文

英文帮助文档

但由于其是在命令行下操作,所以玩一起来还是有一定难度的.与 curl (由libcurl库实现)相比两者还是有一定的区别的.

Linux下可以 wget --help 查看wget帮助,更详细的可以 man wget

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
启动:
-V, --version 显示 Wget 的版本信息并退出
-h, --help 打印此帮助
-b, --background 启动后转入后台
-e, --execute=命令 运行一个“.wgetrc”风格的命令
日志和输入文件:
-o, --output-file=文件 将日志信息写入 FILE
-a, --append-output=文件 将信息添加至 FILE
-d, --debug 打印大量调试信息
-q, --quiet 安静模式 (无信息输出)
-v, --verbose 详尽的输出 (此为默认值)
-nv, --no-verbose 关闭详尽输出,但不进入安静模式
--report-speed=类型 以 <类型> 报告带宽。类型可以是 bits
-i, --input-file=文件 下载本地或外部 <文件> 中的 URL
-F, --force-html 把输入文件当成 HTML 文件
-B, --base=URL 解析相对于 URL 的 HTML 输入文件链接 (-i -F)
--config=文件 指定要使用的配置文件
--no-cookies 不读取任何配置文件
--rejected-log=文件 将拒绝 URL 的原因写入 <文件>。
下载:
-t, --tries=数字 设置重试次数为 <数字> (0 代表无限制)
--retry-connrefused 即使拒绝连接也是重试
-O, --output-document=文件 将文档写入 FILE
-nc, --no-clobber 不要下载已存在将被覆盖的文件
--no-netrc don't try to obtain credentials from .netrc
-c, --continue 断点续传下载文件
--start-pos=偏移量 从由零计数的 <偏移量> 开始下载
--progress=类型 选择进度条类型
--show-progress 在任意啰嗦状态下都显示进度条
-N, --timestamping 只获取比本地文件新的文件
--no-if-modified-since 不要在时间戳 (timestamping) 模式下使用
if-modified-since get 条件请求
--no-use-server-timestamps 不用服务器上的时间戳来设置本地文件
-S, --server-response 打印服务器响应
--spider 不下载任何文件
-T, --timeout=SECONDS 将所有超时设为 SECONDS 秒
--dns-timeout=SECS 设置 DNS 查寻超时为 SECS 秒
--connect-timeout=SECS 设置连接超时为 SECS 秒
--read-timeout=SECS 设置读取超时为 SECS 秒
-w, --wait=SECONDS 等待间隔为 SECONDS 秒
--waitretry=SECONDS 在获取文件的重试期间等待 1..SECONDS
--random-wait 获取多个文件时,每次随机等待间隔 (0.5~1.5)*WAIT 秒
--no-proxy 禁止使用代理
-Q, --quota=数字 设置获取配额为 <数字> 字节
--bind-address=ADDRESS 绑定至本地主机上的 ADDRESS (主机名或是 IP)
--limit-rate=RATE 限制下载速率为 RATE
--no-dns-cache 关闭 DNS 查询缓存
--restrict-file-names=系统 限定文件名中的字符为 <系统> 允许的字符
--ignore-case 匹配文件/目录时忽略大小写
-4, --inet4-only 仅连接至 IPv4 地址
-6, --inet6-only 仅连接至 IPv6 地址
--prefer-family=地址族 首先连接至指定家族(IPv6,IPv4 或 none)的地址
--user=用户 将 ftp 和 http 的用户名均设置为 <用户>
--password=密码 将 ftp 和 http 的密码均设置为 <密码>
--ask-password 提示输入密码
--use-askpass=COMMAND specify credential handler for requesting
username and password. If no COMMAND is
specified the WGET_ASKPASS or the SSH_ASKPASS
environment variable is used.
--no-iri 关闭 IRI 支持
--local-encoding=ENC 使用 ENC 作为 IRI (国际化资源标识符) 的本地编码
--remote-encoding=ENC 使用 ENC 作为默认远程编码
--unlink 覆盖前移除文件
--no-xattr 不要在文件的拓展属性中储存元数据
目录:
-nd, --no-directories 不创建目录
-x, --force-directories 强制创建目录
-nH, --no-host-directories 不要创建主 (host) 目录
--protocol-directories 在目录中使用协议名称
-P, --directory-prefix=前缀 保存文件到 <前缀>/..
--cut-dirs=数字 忽略远程目录中 <数字> 个目录层。
HTTP 选项:
--http-user=用户 设置 http 用户名为 <用户>
--http-password=密码 设置 http 密码为 <密码>
--no-cache 不使用服务器缓存的数据。
--default-page=NAME 改变默认页 (通常是“index.html”)
-E, --adjust-extension 以合适的扩展名保存 HTML/CSS 文档
--ignore-length 忽略头部的‘Content-Length’区域
--header=字符串 在头部插入 <字符串>
--compression=TYPE choose compression, one of auto, gzip and none
--max-redirect 每页所允许的最大重定向
--proxy-user=用户 使用 <用户> 作为代理用户名
--proxy-password=密码 使用 <密码> 作为代理密码
--referer=URL 在 HTTP 请求头包含‘Referer: URL’
--save-headers 将 HTTP 头保存至文件。
-U, --user-agent=代理 标识自己为 <代理> 而不是 Wget/VERSION。
--no-http-keep-alive 禁用 HTTP keep-alive (持久连接)
--no-cookies 不使用 cookies。
--load-cookies=文件 会话开始前从 <文件> 中载入 cookies。
--save-cookies=文件 会话结束后保存 cookies 至 FILE。
--keep-session-cookies 载入并保存会话 (非永久) cookies。
--post-data=字符串 使用 POST 方式;把 <字串>作为数据发送。
--post-file=文件 使用 POST 方式;发送 <文件> 内容。
--method=HTTP方法 在请求中使用指定的 <HTTP 方法>。
--post-data=字符串 把 <字串> 作为数据发送,必须设置 --method
--post-file=文件 发送 <文件> 内容,必须设置 --method
--content-disposition 当选择本地文件名时允许 Content-Disposition
头部 (实验中)
--content-on-error 在服务器错误时输出接收到的内容
--auth-no-challenge 不先等待服务器询问就发送基本 HTTP 验证信息。
HTTPS (SSL/TLS) 选项:
--secure-protocol=PR choose secure protocol, one of auto, SSLv2,
SSLv3, TLSv1, TLSv1_1, TLSv1_2 and PFS
--https-only 只跟随安全的 HTTPS 链接
--no-check-certificate 不要验证服务器的证书。
--certificate=文件 客户端证书文件。
--certificate-type=类型 客户端证书类型,PEM 或 DER。
--private-key=文件 私钥文件。
--private-key-type=类型 私钥文件类型,PEM 或 DER。
--ca-certificate=文件 带有一组 CA 证书的文件。
--ca-directory=DIR 保存 CA 证书的哈希列表的目录。
--ca-certificate=文件 带有一组 CA 证书的文件。
--pinnedpubkey=文件/散列值 用于验证节点的公钥(PEM/DER)文件或
任何数量的 sha256 散列值,以 base64 编码、
“sha256//” 开头、用“;”间隔
HSTS 选项:
--no-hsts 禁用 HSTS
--hsts-file HSTS 数据库路径(将覆盖默认值)
FTP 选项:
--ftp-user=用户 设置 ftp 用户名为 <用户>。
--ftp-password=密码 设置 ftp 密码为 <密码>
--no-remove-listing 不要删除‘.listing’文件
--no-glob 不在 FTP 文件名中使用通配符展开
--no-passive-ftp 禁用“passive”传输模式
--preserve-permissions 保留远程文件的权限
--retr-symlinks 递归目录时,获取链接的文件 (而非目录)
FTPS 选项:
--ftps-implicit 使用隐式 FTPS(默认端口 990)
--ftps-resume-ssl 打开数据连接时继续控制连接中的 SSL/TLS 会话
--ftps-clear-data-connection 只加密控制信道;数据传输使用明文
--ftps-fallback-to-ftp 回落到 FTP,如果目标服务器不支持 FTPS
WARC 选项:
--warc-file=文件名 在一个 .warc.gz 文件里保持请求/响应数据
--warc-header=字符串 在头部插入 <字符串>
--warc-max-size=数字 将 WARC 的最大尺寸设置为 <数字>
--warc-cdx 写入 CDX 索引文件
--warc-dedup=文件名 不要记录列在此 CDX 文件内的记录
--no-warc-compression 不要 GZIP 压缩 WARC 文件
--no-warc-digests 不要计算 SHA1 摘要
--no-warc-keep-log 不要在 WARC 记录中存储日志文件
--warc-tempdir=目录 WARC 写入器的临时文件目录
递归下载:
-r, --recursive 指定递归下载
-l, --level=数字 最大递归深度 (inf 或 0 代表无限制,即全部下载)
--delete-after 下载完成后删除本地文件
-k, --convert-links 让下载得到的 HTML 或 CSS 中的链接指向本地文件
--convert-file-only 只转换 URL 的文件部分(一般叫做“基础名”/basename
--backups=N 写入文件 X 前,轮换移动最多 N 个备份文件
-K, --backup-converted 在转换文件 X 前先将它备份为 X.orig。
-m, --mirror -N -r -l inf --no-remove-listing 的缩写形式。
-p, --page-requisites 下载所有用于显示 HTML 页面的图片之类的元素。
--strict-comments 用严格方式 (SGML) 处理 HTML 注释。
递归接受/拒绝:
-A, --accept=列表 逗号分隔的可接受的扩展名列表
-R, --reject=列表 逗号分隔的要拒绝的扩展名列表
--accept-regex=REGEX 匹配接受的 URL 的正则表达式
--reject-regex=REGEX 匹配拒绝的 URL 的正则表达式
--regex-type=类型 正则类型 (posix|pcre)
-D, --domains=列表 逗号分隔的可接受的域名列表
--exclude-domains=列表 逗号分隔的要拒绝的域名列表
--follow-ftp 跟踪 HTML 文档中的 FTP 链接
--follow-tags=列表 逗号分隔的跟踪的 HTML 标识列表
--ignore-tags=列表 逗号分隔的忽略的 HTML 标识列表
-H, --span-hosts 递归时转向外部主机
-L, --relative 仅跟踪相对链接
-I, --include-directories=列表 允许目录的列表
--trust-server-names 使用重定向 URL 的最后一段作为本地文件名
-X, --exclude-directories=列表 排除目录的列表
-np, --no-parent 不追溯至父目录

如此多的参数,看着实在望而生畏,不过好在这是有中文的,所以…慢慢来

下面以实例来介绍该用具的主要用法

下载单个文件

# wget https://ftp.gnu.org/gnu/wget/wget-1.19.tar.gz -P save_files -O wget.tar.gz

–2018-01-06 17:22:48– https://ftp.gnu.org/gnu/wget/wget-1.19.tar.gz
正在解析主机 ftp.gnu.org (ftp.gnu.org)… 208.118.235.20, 2001:4830:134:3::b
正在连接 ftp.gnu.org (ftp.gnu.org)|208.118.235.20|:443… 已连接。
已发出 HTTP 请求,正在等待回应… 200 OK
长度:4202290 (4.0M) [application/x-gzip]
正在保存至: “wget.tar.gz”
6%[=> ] 280.00K 21.8KB/s 剩余 3m 6s

  • -O 指定输出文件的名字

  • -P 指定保存文件的目录 (未指定该参数默认保存在当前路径)

    下载多个文件

    可以把要下载的多个链接地址保存到一个文件中,并在wget时指定 -i 参数

# wget -i files.txt

断点续传

有时候在下载一个比较大的文件,碰到网络环境不好或者突然断网了,那么要重新下载这个文件了.为了避免这种情况发生,大多数下载软件都支持断点续传.顾名思义,就是在网络等问题的影响下而被中断下载后,等到网络恢复后,在原来的地方接着下载.

wget也支持该功能,由参数 -c 指定
# wget -c https://baidu.com -t 5

  • -t 指定重试次数 ,0 表示无限制

代理下载

要下载一个国外的文件,有时运气不好(被墙),导致无法下载所需文件.这时就要使用代理了,而不是纠结该链接地址有问题.

说到代理,可以是本地搭建代理的服务器,也可以从网络上获得的公共服务器,这里以本地代理服务器为例.
不过在此之前我已设置好了代理服务器,该服务器为: http://127.0.0.1:8087

# wget https://www.google.com -O output.html -e “use_proxy=on” -e “https_proxy=http://127.0.0.1:8087“

  • -e 运行一个“.wgetrc”风格的命令,wgetrc文件位于 /etc/wgetrc,为wget运行时的初始化文件.也可以在该文件里设置代理服务器地址(全局变量)
  • use_proxy=on/no 使用/禁止代理,一般使用代理时,要指明该操作
  • http_proxy/https_proxy/ftp_proxy 3种协议的代理服务器,格式皆为: http://proxy.yoyodyne.com:18023

运行该命令输出如下

–2018-01-06 17:45:29– https://www.google.com/
正在连接 127.0.0.1:8087… 已连接。
错误: “www.google.com” 的证书不可信。
错误: “www.google.com” 的证书颁发者未知。
错误: “www.google.com” 的证书使用不安全的算法签名。

注意该处,我用的是 gae_proxy ,由于证书问题而出现该错误,解决方法两种

  • 直接在原来命令行后加上 –no-check-certificate选项 ,表示不检查证书安全问题,忽略该过程.且错误变成了警告
  • 指定证书,我的是 CA.crt 用到 –ca-certificate 选项,之后便可正常下载了.如:

wget https://www.google.com -O output.html –progress=dot -e “use_proxy=on” -e “https_proxy=http://127.0.0.1:8087“ –ca-certificate=data/gae_proxy/CA.crt

限速下载

# wget –limit-rate=10k https://ftp.gnu.org/gnu/wget/wget-1.18.tar.gz

  • –limit-rate 指定要限制的大小

img

测试下载链接

# wget –spider http://baidu.com

打开 Spider 模式。检查是否存在远程文件。
–2018-01-06 18:13:16– http://baidu.com/
正在解析主机 baidu.com (baidu.com)… 111.13.101.208, 123.125.114.144, 220.181.57.217
正在连接 baidu.com (baidu.com)|111.13.101.208|:80… 已连接。
已发出 HTTP 请求,正在等待回应… 200 OK
长度:81 [text/html]
存在远程文件且该文件可能含有更深层的链接,但不能进行递归操作 – 无法获取

  • 通过 –spider参数,可以测试下载链接是否有效

最后一个例子:

# wget –user-agent=”Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36” https://ftp.gnu.org/gnu/wget/wget-1.18.tar.xz -e “use_proxy=on” -e “http_proxy=http://127.0.0.1:8087“ -t 5 -P save_file –progress=dot

更多的参数还是要去查看帮助文档的…

结束

bye~