Wget是一个从web下载文件的免费且实用的程序。它从Internet获取数据并将其保存到文件或显示在终端中。这实际上也是web浏览器(如Firefox或Chromium)所做的,除非默认情况下,它们在图形窗口中呈现信息,并且通常需要用户主动控制它们。wget实用程序设计为非交互式,这意味着无论你是否在计算机上,都可以编写wget脚本或安排wget下载文件。
使用wget下载文件
你可以通过给定一个地址来使用wget下载文件,如果你提供的地址默认指向index.html, 那么这个index页面将会被下载。默认情况下,该文件会以相同的命名下载到当前工作目录中。
wget http://example.com
17:23:47-- http://example.com/
Resolving example.com... 93.184.216.34, 2606:2800:220:1:248:1893:25c8:1946
Connecting to example.com|93.184.216.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1256 (1.2K) [text/html]
Saving to: 'index.html'
你可以使用 --output-document 和一个破折号 - 让wget将数据输出到标准输出(stdout):
$ wget http://example.com --output-document - | head -n4
<html>
<head>
<title>Example Domain</title>
你可以使用 --output-document(简写为 -O)重新命名你下载的文件:
$ wget http://example.com --output-document foo.html
断点续传
如果你正在下载一个非常大的文件,而你不得不中断下载,那么可以使用 --continue (简写为 -c) 命令, wget可以确定下载停止的位置并在这个位置上继续下载。这意味着下次下载4GB的 Linux ISO文件时,如果出现问题,就不必从头开始。
$ wget --continue https://example.com/linux-distro.iso
下载文件集
如果你需要下载的不是一个大文件而是几个文件,wget可以帮助你。假设你知道要下载的文件的位置和文件名模式,可以使用Bash语法指定一系列整数之间的起点和终点,以表示一系列文件名:
$ wget http://example.com/file_{1..4}.webp
镜像(下载)整个站点
你可以使用 --mirror 选项下载整个站点,包括其目录结构。这个选项与运行 --recursive --level inf --timestamping --no-remove-listing 相同,这意味着它是无限递归的,因此你可以获得指定站点上的所有内容。
如果你使用 wget 来下载一个站点,那么选项 --no-cookies --page-requisites --convert-links 可以确保每个页面都是完整的,并且站点副本或多或少都是独立的。
修改HTML头
用于数据交换的协议在计算机发送用于通信的数据包中嵌入了大量元数据。HTTP 头是数据初始部分的组件。浏览网站时,浏览器会发送 HTTP 请求头。使用 --debug 选项查看 wget 随每个请求发送的标头信息:
$ wget --debug example.com
---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.19.5 (linux-gnu)
Accept: */*
Accept-Encoding: identity
Host: example.com
Connection: Keep-Alive
---request end---
你可以使用 --header 选项修改请求头。比如,在模拟特定浏览器的时候很非常有用,无论是用于测试,还是用于只对于特定的代理用户能访问的站点。
要标识为在Windows上运行的Microsoft Edge,请执行以下操作:
$ wget --debug --header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.59" http://example.com
你还可以伪装成特定的移动设备:
$ wget --debug
--header="User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1"
http://example.com
查看响应头
与浏览器请求头的方式相同,头信息也包含在响应中。可以使用 --debug 查看响应头:
$ wget --debug example.com
[...]
---response begin---
HTTP/1.1 200 OK
Accept-Ranges: bytes
Age: 188102
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Etag: "3147526947"
Server: ECS (sab/574F)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256
---response end---
200 OK
Registered socket 3 for persistent reuse.
URI content encoding = 'UTF-8'
Length: 1256 (1.2K) [text/html]
Saving to: 'index.html'
响应301
响应代码200意味着一切都按预期进行,代码301表示所访问的地址已经移动到了其他位置。网站管理员通常会留下“线索”的同时重新定位内容,以便访问旧位置的人仍然可以找到它。默认情况下,wget 遵循重定向,这也是我们所希望的。
但是,你可以控制 wget 在遇到301响应的时候,不执行重定向,通过使用 --max-redirect 选项来实现(将其设置为0):
wget --max-redirect 0 http://iana.org
11:01:35-- http://iana.org/
Resolving iana.org... 192.0.43.8, 2001:500:88:200::8
Connecting to iana.org|192.0.43.8|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.iana.org/ [following]
0 redirections exceeded.
或者,你可以将其设置为其他数字,以控制wget接下来的重定向数量。
展开缩短的URL
--max-redirect 选项在实际访问一个缩短的URL之前查看它们非常有用。缩短的URL对于印刷媒体很有用,在印刷媒体中,或者在有字符限制的社交网络上(这在像Mastodon这样的现代开源社交网络上并不是一个问题),用户不能只复制和粘贴一个长的URL。然而,它们也可能有点危险,因为它们的目的地(实际地址)是隐蔽的。结合--head 选项查看HTTP头信息,以及--location 选项解开一个URL的最终地址,你可以在不加载完整资源的情况下查看缩短的URL:
$ wget http://example.com --output-document - | head -n4
<html>
<head>
<title>Example Domain</title>
0
倒数第二行的输出,从Location开始,显示真实的地址。
当你开始练习将浏览web的过程作为一个命令进行思考,wget就成为了一种快速有效的方法,可以从Internet中提取你需要的信息,而无需使用图形界面。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...