18
7月
2023
17:41

用 Wget2 替换 Wget 实用程序(第 2 部分)

18 7月 2023 17:41

文章第二部分。参见第 1 部分

HTTP 选项:

--default-page=name
当 name 未知时(例如,以斜杠结尾的 URL),请使用 name 作为默认文件名,而不是 index.html。

--default-http-port=port
设置 HTTP URL 的默认端口(默认值:80)。

主要用于测试目的。

--default-https-port=port
设置 HTTPS URL 的默认端口(默认值:443)。

主要用于测试目的。

-E, --adjust-extension
如果加载了像 application/xhtml+xml 或 text/html 这样的文件,并且 URL 不以正则表达式 .[Hh][Tt][Mm][Ll]? 结尾,则此选项将导致 .html 后缀附加到本地文件名。 例如,当您镜像使用 .asp 页面的远程站点,但希望镜像页面可以在标准 Apache 服务器上查看时,这非常有用。 另一个很好的用途是当您加载 CGI 生成的材料时。 像 https://example.com/article.cgi?25 这样的 URL 将被保存为article.cgi?25.html。

请注意,每次重新镜像站点时,以这种方式更改的文件名都会重新下载,因为 Wget2 无法判断本地文件 X.html 是否与远程 URL X 匹配(因为它还不知道 URL 会生成类似 text/html 或 application/xhtml+xml 的输出)。

Wget2 还确保任何下载的文本/css 文件以 .css 后缀结尾。

在将来的某个时候,此选项很可能会扩展为包含其他内容类型的后缀,包括 Wget 无法解析的内容类型。

--http-user=user, --http-password=password
指定用于 HTTP 身份验证的用户名和密码。 根据任务类型,Wget 将使用“基本”(不安全)、“摘要”Windows 身份验证方案或“NTLM”对它们进行编码。

如果可能,请将您的凭据放入 ~/.netrc(另请参阅 --netrc 和 --netrc-file 选项)或 .wget2rc 中。 这比使用任何其他用户都可以看到的命令行安全得多。 如果密码确实很重要,请不要将它们留在这些文件中。 编辑文件并在 Wget2 开始下载后删除它们。

在 ~/.netrc 文件中,密码可以用双引号括起来以转义空格。 另外,如有必要,请使用反斜杠转义字符。 密码中的反斜杠应始终进行转义,因此请使用 \ 而不是单个 \。

另请参阅 --use-askpass и --ask-password 用于提供密码的交互式方法。

--http-proxy-user=user, --http-proxy-password=password
指定用于在 HTTP 代理服务器上进行身份验证的用户名和密码。 详情请参阅 --http-user

--http-proxy=proxies
指定以逗号分隔的 HTTP 代理列表。 环境变量 http_proxy' будет переопределена. Исключения можно установить с помощью переменной окружения no_proxy' или с помощью --no-proxy

--https-proxy=proxies
指定以逗号分隔的 HTTPS 代理列表。 环境变量 https_proxy будет переопределена. Исключения можно установить с помощью переменной окружения no_proxy или с помощью --no-proxy

--no-http-keep-alive
禁用 HTTP(S) 下载的保持活动状态。 通常,Wget2 要求服务器保持连接打开,以便从同一服务器下载多个文档时,它们通过同一 TCP 连接进行传输。 这样可以节省时间,同时减少服务器的负载。

当由于某种原因保持活动连接对您不起作用时,例如由于服务器错误或由于服务器脚本无法处理连接,此选项非常有用。

--no-cache
禁用服务器端缓存。 在这种情况下,Wget2 将向远程服务器发送适当的指令(Cache-Control: no-cache 和 Pragma: no-cache)以从远程服务检索文件,而不是返回缓存的版本。 这对于检索和清理代理服务器上过时的文档特别有用。
默认情况下启用缓存。

--no-cookies
禁用 cookie 的使用。 Cookie 是一种用于维护状态的服务器端机制。 服务器使用“Set-Cookie”标头向客户端发送 cookie,客户端使用相同的 cookie 响应进一步的请求。 由于 Cookie 允许服务器所有者跟踪访问者和站点以共享该信息,因此一些人认为 Cookie 侵犯了隐私。 默认使用cookie;但是,保存 cookie 被禁用。

--load-cookies file
在第一个 HTTP(S) 请求之前从文件加载 cookie。 该文件是一个文本文件,其格式最初由 Netscape 的 cookie.txt 文件使用。

通常,当镜像站点需要您登录才能访问其部分或全部内容时,您将使用此选项。 登录过程通常是通过让 Web 服务器在接收并验证您​​的凭据后发出 HTTP cookie 来进行的。 当您访问网站的该部分时,浏览器会重新发送 cookie,从而确认您的身份。

镜像此类站点需要 Wget2 发送与您的浏览器在与该站点通信时发送的相同 cookie。 这是通过使用实现的 --load-cookies :只需告诉 Wget2 cookies.txt 文件的位置,它就会发送与您的浏览器在相同情况下发送的相同的 cookie。 不同的浏览器将文本cookie存储在不同的位置:

“网景 4.x”。 Cookie 位于 ~/.netscape/cookies.txt 中。
“Mozilla 和 Netscape 6.x”。 Mozilla cookie 也称为 cookies.txt,位于您的个人资料目录中 ~/.mozilla 文件夹中的某个位置。 完整路径通常如下所示:~/.mozilla/default/some-weird-string/cookies.txt。
“互联网浏览器”。 您可以使用“文件”、“导入和导出”、“导出 Cookie”菜单创建 Wget2 可以使用的 cookie。 这是使用 Internet Explorer 5 进行测试的;不保证它可以与早期版本一起使用。
“其他浏览器”。 如果您使用其他浏览器创建cookie,--load-cookies 仅当您可以找到或创建 Wget2 期望的 Netscape 格式的 cookie 时才有效。

如果你不能使用 --load-cookies,可能还有替代方案。 如果您的浏览器支持“cookie 管理器”,您可以使用它来查看访问您正在镜像的站点时使用的 cookie。 记下 cookie 名称和值,并手动指示 Wget2 发送这些 cookie,绕过“官方”cookie 支持:
wget2 --no-cookies --header "Cookie: <name>=<value>"

--save-cookies file
退出前将 cookie 保存到文件中。 这不会存储过期或未过期的 cookie(所谓的“会话 cookie”),但另请参阅选项 --keep-session-cookies

--keep-session-cookies
当指定时,该选项会导致 --save-cookies 还存储_会话_cookie。 会话 cookie 通常不会被存储,因为它们被设计为存储在内存中,并且在您退出浏览器时会被遗忘。 对于要求您先登录或访问主页才能访问某些页面的网站,保存它们非常有用。 使用此选项,从站点的角度来看,Wget2 的多次运行将被视为一个浏览器会话。

由于 cookie 格式通常不包含会话 cookie,因此 Wget2 使用过期时间戳 0 来标记它们。
Wget2 --load-cookies распознает их как файлы cookie сеанса, но это может сбить с толку другие браузеры. Также обратите внимание, что файлы cookie, загруженные таким образом, будут рассматриваться как другие файлы cookie сеанса, а это означает, что если вы хотите, чтобы --save-cookies снова их сохраняла, вы должны снова использовать --keep-session-cookies

--cookie-suffixes=file
从指定文件加载用于 cookie 验证的公共后缀。

通常,libpsl 核心库从系统文件加载此数据或内置数据。 在某些情况下,可能需要下载更新的 PSL 公共后缀文件,例如从 公共后缀列表.dat

PSL 允许您防止安装导致 cookie 隐私泄露的“超级 cookie”。 更多信息请访问 https://publicsuffix.org/。

--ignore-length
不幸的是,一些 HTTP 服务器(准确地说是 CGI 程序)发送伪造的“Content-Length”标头,这会导致 Wget2 发疯,因为它认为没有收到整个文档。 如果 Wget 尝试一遍又一遍地获取相同的文档,每次都声称(否则正常的)连接在同一字节上关闭,您可能会注意到这种综合症。

使用此选项,Wget2 将忽略“Content-Length”标头,就好像它从未存在一样。

--header=header-line
在每个 HTTP 请求中将标头行与其他标头一起发送。 提供的标头按原样发送,这意味着它必须包含用冒号分隔的名称和值,并且不得包含换行符。

您可以通过多次指定 –header 来定义多个附加标头。
wget2 --header='接受字符集:iso-8859-2' \
--header='接受语言:hr' \
https://example.com/

指定空字符串作为标头值将清除以前的用户定义标头。

此选项可用于覆盖自动生成的标头。 此示例告诉 Wget2 连接到 localhost,但在“Host”标头中指定 example.com:

wget2 --header="Host: example.com" http://localhost/

--max-redirect=number
指定资源的最大重定向次数。 默认值为 20,通常比需要的要高得多。 但是,如果您想要允许更多(或更少),则可以使用此选项。

--proxy-user=user, --proxy-password=password (未实现,请使用--http-proxy-password)。
指定在代理服务器上进行身份验证的登录用户和密码password。 Wget2 将使用“基本”身份验证方案对它们进行编码。
安全考虑因素,例如影响 --http-password,也可以在这里申请。

--referer=url
在 HTTP 请求中包含“Referer: url”标头。 对于通过服务器端处理检索文档很有用,假设它们始终由交互式 Web 浏览器检索,并且只有在将 Referer 设置为指向它们的页面之一时才能正确呈现。

--save-headers
将 HTTP 服务器发送的标头在实际内容之前保存到文件中,并以空行作为分隔符。

-U agent-string, --user-agent=agent-string
使用以下行“User-Agent”在 HTTP 服务器上进行标识。

HTTP 协议允许客户端使用“User-Agent”标头字段来标识自己。 这使得 WWW 软件能够区分,通常用于统计目的或跟踪协议违规。 Wget 通常标识为 Wget/version,其中 version 是 Wget 的当前版本号。

然而,已知某些站点会根据“用户代理”提供的信息实施调整输出的策略。 虽然这在理论上并不是一个坏主意,但它已被服务器滥用,拒绝向(历史上)Netscape 或更常见的 Microsoft Internet Explorer 以外的客户端提供信息。 此选项允许您更改 Wget 返回的“User-Agent”字符串。 除非您确实知道自己在做什么,否则不建议使用此选项。

--post-data=string, --post-file=file
使用 POST 作为所有 HTTP 请求的方法,并在请求正文中发送指定的数据。--post-data отправляет строку в виде данных, тогда как --post-file 发送文件的内容。 否则它们的工作原理完全相同。

具体来说,这两个参数都期望内容采用“key1=value1&key2=value2”形式,并对特殊字符进行百分比编码。
唯一的区别是,一个期望将其内容作为命令行参数,而另一个则从文件中接受其内容。 特别是, --post-file 并不打算将文件作为表单附件传递:它们应该像其他所有内容一样显示为 key=value 数据(具有适当的百分比编码)。

目前Wget2不支持“multipart/form-data”进行POST数据传输;仅“application/x-www-form-urlencoded”。 仅需指定以下参数之一: --post-data или --post-file

请注意,wget2 不要求内容为“key1=value1&key2=value2”,并且不会对其进行检查。 Wget2 将简单地传递提供给它的任何数据。 然而,大多数服务器在处理 HTML 表单时都希望 POST 数据采用上述格式。

使用参数发送POST请求时 --post-file wget2 将文件视为二进制文件,并将发送 POST 请求中的每个字符,而不删除尾随换行符或页面提要。 文本中的任何其他控制字符也将按 POST 请求中的原样发送。

Име请记住,Wget2 需要提前知道 POST 数据的大小。 因此论证 --post-file 必须是常规文件;指定 FIFO 或 /dev/stdin 之类的东西将不起作用。 目前还不完全清楚如何解决 HTTP/1.0 固有的限制。 尽管 HTTP/1.1 引入了不需要预先了解请求长度的分段传输,但除非客户端知道自己正在与 HTTP/1.1 服务器通信,否则客户端无法使用此传输。 在收到答案之前,他无法知道这一点,而答案又需要满足请求——“先有鸡还是先有蛋的问题”。

如果 Wget2 在 POST 请求完成后重定向,则其行为取决于服务器返回的响应代码。 在“301永久移动”、“302暂时移动”或“307暂时重定向”的情况下,Wget2将根据RFC2616继续发送POST请求。 如果服务器希望客户端在重定向时改变请求方式,则必须发送“303 See Other”响应码。

此示例显示如何使用 POST 登录服务器,然后继续加载所需的页面,大概只有授权用户可以访问:
<代码>#登录服务器。 此操作只能执行一次。
wget2 --save-cookies cookies.txt \
--post-data '用户=foo&密码=bar' \
http://example.com/auth.php
#现在我们捕获我们感兴趣的一个或多个页面。
wget2 --load-cookies cookies.txt \
-p http://example.com/interesting/article.php

如果服务器使用会话cookie来跟踪用户身份验证,则上述方法将不起作用,因为 --save-cookies не сохранит их (как и браузеры), а файл cookies.txt будет пустым. В этом случае используйте ---keep-session-cookies вместе с опцией --save-cookies 强制保存会话cookie。

--method=HTTP-Method
对于 RESTful 场景,Wget2 允许您发送其他 HTTP 方法,而无需使用显式设置它们 --header=Header-Line. Wget2 будет использовать любую строку, переданную ему после --method,作为服务器的 HTTP 方法。

--body-data=Data-String, --body-file=Data-File
当需要将附加数据与该选项指定的方法一起发送到服务器时,必须设置此选项 --method. Ключ --body-data отправляет строку как данные, а --body-file 发送文件的内容。 否则它们的工作原理完全相同。

当前选项 --body-file не предназначена для передачи файлов целиком. В настоящее время Wget2 не поддерживает «multipart/form-data» для передачи данных; только «application/x-www-form-urlencoded». В будущем это может быть изменено, чтобы wget2 отправлял --body-file как полный файл, а не отправлял его содержимое на сервер. Имейте в виду, что Wget2 необходимо заранее знать содержимое BODY Data, поэтому аргумент --body-file должен быть обычным файлом. См. --post-file для более подробного объяснения. Должен быть указан только один из --body-data и --body-file

如果 Wget2 在请求完成后重定向,Wget2 会暂停当前方法并发送 GET 请求,直到重定向完成。 对于所有重定向响应代码都是如此,除了 307 临时重定向,它用于明确指示不应更改请求方法。 另一个例外是当方法设置为“POST”时,在这种情况下将遵循参数中指定的重定向规则 --post-data

--content-disposition
启用后,将启用对“Content-Disposition”标头的实验性(非完整功能)支持。 目前,这可能会导致“HEAD”请求对服务器产生额外的命中,并且已知存在多个错误,因此当前默认情况下未启用它。

此选项对于某些加载文件的 CGI 程序很有用,这些程序使用“Content-Disposition”标头来描述加载文件的名称。

--content-on-error
如果启用此选项,当服务器响应指示错误的 http 状态代码时,wget2 将不会传递内容。

--save-content-on
在等号之后,您需要指定一个以逗号分隔的 HTTP 状态代码列表,内容将保存在该列表中。

您可以使用“*”来表示任何内容。 代码前的感叹号(!)表示“异常”。

示例1: --save-content-on="*,!404" 将保存具有 404 之外的任何 HTTP 状态代码的内容。

示例2: --save-content-on=404 只会保存 HTTP 状态代码为 404 的内容。

较旧的选项 --content-on-error действует так же, как --save-content-on=*

--trust-server-names
如果启用此设置,则重定向时将使用重定向 URL 的最后一个组成部分作为本地文件名。 默认情况下,使用源 URL 的最后一个组成部分。

--auth-no-challenge
如果指定此参数,Wget2 将为所有请求发送基本的 HTTP 身份验证信息(未加密的用户名和密码)。

不建议使用此选项,其目的只是为了支持一些不起眼的服务器,这些服务器从不发送 HTTP 身份验证请求,但除了基于表单的身份验证之外还接受未经请求的身份验证信息。

--compression=TYPE
如果指定了此压缩类型(identity、gzip、deflate、xz、lzma、br、bzip2、zstd、lzip 或其任意组合),Wget2 将相应地设置“Accept-Encoding”标头。 --no-compression 意味着根本没有“Accept-Encoding”标头。 要设置自定义“Accept-Encoding”值,请使用 --no-compression в сочетании с --header="Accept-Encoding: xxx"

兼容性说明:Wget 1.X 没有 Wget2 那样指定压缩类型的方法。

--download-attr=[strippath|usepath]
HTML5 下载属性可以从“a”和“area”标签中的 href URL 指定(或者更好:建议)文件名。 该选项告诉 Wget2 在保存文件时使用该名称。 两个可能的值: `strippath' 从文件名中删除路径。 这是默认值。

含义 usepath 接受包含目录的文件名。 这是非常危险的,我们不能放心地在不受信任的输入或服务器上使用它! 仅当您确实信任输入或服务器时才使用此选项。

HTTPS (SSL/TLS) 选项

为了支持 HTTP (HTTPS) 加密下载,Wget2 必须使用外部 SSL 库支持进行编译。 目前,默认使用 GnuTLS。 此外,Wget2 还支持 HSTS(HTTP 严格传输安全)。 如果 Wget2 编译时没有 SSL 支持,则这些选项都不可用。

--secure-protocol=protocol
选择要使用的安全协议(默认值:自动)。

允许值 auto, SSLv3, TLSv1, TLSv1_1, TLSv1_2, TLSv1_3 и PFS

如果使用 auto,应用默认的 TLS 库模式。

Ука了解 SSLV3 会迫使您使用 SSL3。 当处理较旧且有缺陷的 SSL 服务器实现时,这非常有用,这些服务器发现很难使用底层 TLS 库正确选择 TLS 协议版本。

指定 PFS 可确保符合所谓的完美前向安全集。 简而言之,PFS 增加了为每个 TLS 连接生成一次性密钥的安全性。 这给客户端和服务器 CPU 带来了更大的压力。 我们熟悉的安全密码(例如,没有 MD4)和 TLS 协议。

TLSV1 启用 TLS1.0 或更高版本。 TLSV1_1 启用 TLS1.1 或更高版本。 TLSV1_2 启用 TLS1.2 或更高版本。 TLSV1_3 启用 TLS1.3 或更高版本。

任何其他协议字符串都会作为“优先级”或“密码”字符串直接传递到 TLS 库(当前为 Gnutls)。
此选项适用于了解自己在做什么的用户。

--https-only
在递归模式下,程序将仅遵循 HTTPS 链接。

--no-check-certificate
不要根据可用的证书颁发机构检查服务器证书。 如果主机 URL 名称与证书表示的公用名称不匹配,也可以使用。

默认情况下,服务器证书验证是针对证书颁发机构执行的,如果证书验证失败,则会中断 SSL 握手并中止启动。 虽然这提供了更安全的下载,但它破坏了与某些使用早期版本 WGET 的网站的兼容性,尤其是那些使用自签名、过期或其他无效证书的网站。 此选项强制采用“不安全”操作模式,将证书验证错误转变为警告并允许您继续。

如果您遇到“证书验证”错误或提到“公用名与请求的主机名不匹配”,您可以使用此选项绕过验证并继续下载。 仅当您确信该站点的真实性或者您确实不关心其证书的有效性时才使用此选项。 在传输敏感或重要数据时不检查证书几乎总是一个坏主意。 为我自己

自签名/内部证书:您应该下载证书并检查它,而不是强制使用这种不安全的模式。 如果您确实不需要任何证书验证,您可以指定 --check-certificate=quiet 告诉 WGET2 不要打印任何有关无效证书的警告,尽管这在大多数情况下是不正确的。

--certificate=file
使用文件中存储的客户端证书。 对于配置为需要来自连接到它们的客户端的证书的服务器,需要此选项。 通常不需要证书,并且此开关是可选的。

--certificate-type=type
指示客户端证书的类型。 感知值是PEM(默认)或DER,也称为ASN1。

--private-key=file
从文件中读取私钥。 此选项允许您在与证书分开的文件中提供私钥。

--private-key-type=type
指定私钥类型。 PEM(默认)和DER的感知值。

--ca-certificate=file
使用存储一堆证书颁发机构证书(“CA”)的文件来验证各方。 证书必须采用 PEM 格式。

如果不指定此选项,Wget2 将在 OpenSSL 安装期间选择的系统位置(文件夹)中查找 CA 证书。

--ca-directory=directory
指定包含 PEM 格式的证书颁发机构 (CA) 证书的目录。 每个文件都包含一个证书颁发机构 (CA) 证书,文件名源自该证书文件的哈希值。 这是通过使用 OpenSSL 提供的“C_REHASH”实用程序处理证书目录来实现的。 当安装许多证书时,使用 --ca-directory 比 --ca-certificate 更有效,因为它允许 WGET2 按需获取证书。

如果没有此选项,WGET2 将在 OpenSSL 安装期间选择的系统位置中查找 CA 证书。

--crl-file=file
指定证书吊销文件 (CRL)。 需要指出已被证书颁发机构 (CA) 吊销的证书。

--random-file=file
(仅适用于 OpenSSL 和 LibreSSL)。 在没有 /dev/urandom 设备的系统上,使用该文件作为伪随机数生成器种子的随机数据源。

在此类系统上,SSL 库需要外部随机源进行初始化。 随机性可以由 EGD 提供(参见下面的 –EGD)或从用户指定的外部源读取。 如果未指定此选项,WGET2 将在 $randfile 中查找随机数据,如果不正确,则在 $home/.rnd 中查找随机数据。

如果您收到错误“无法播种 OpenSSL PRNG;禁用 SSL。”,您应该使用上述一些方法提供随机数据。

--egd-file=file
[仅限 OpenSSL] 使用该文件作为 EGD 套接字。 缩写 EGD 代表熵收集守护进程,它是一个用户空间程序,它从各种不可预测的系统源收集数据,并使其他使用加密的程序可以使用熵,例如 SSL 库,它需要非重复随机值源来为用于创建加密强密钥的随机数生成器提供种子。

OpenSSL 允许用户使用“RAND_FILE”环境变量指定自己的熵源。 如果未设置此变量,或者指定的文件未提供足够的随机性,OpenSSL 将从使用此选项指定的 EGD 套接字读取随机数据。

如果未指定此选项(并且未使用等效的运行命令),则永远不会关联 EGD。支持 /dev/urandom 的现代 UNIX 系统不需要 EGD。

--hsts
WGET2 默认支持 HSTS(HTTP 严格传输安全,RFC 6797)。 使用 --no-hsts 强制 WGET2 充当不兼容 HSTS 的用户代理。 因此,WGET2 将忽略所有“Strict-Transport-Security”标头,并且不会强制执行任何现有的 HSTS 策略。

--hsts-file=file
默认情况下,WGET2 将其 HSTS 数据存储在 $xdg_data_home/wget/.wget-hsts 中,或者,如果未设置 xdg_data_home,则存储在 ~/.lo-cal/wget/.wget-hsts 中。 您可以使用 --hsts-file 来覆盖它。

WGET2 将使用提供的文件作为 HSTS 数据库。 此类文件必须符合 WGET 使用的正确 HSTS 数据库格式。 如果 WGET2 无法解析提供的文件,则行为未定义。

要禁用持久存储,请使用 --no-hsts-file。

Wget2 HSTS 数据库是一个简单的文本文件。 每行包含一个 HSTS 条目(即发出“Strict-Transport-Security”标头并因此指定要应用的特定 HSTS 策略的站点)。 以破折号开头的行 ("#"),被 Wget 忽略。 请注意,尽管有这种人类可读的形式,但手动修补 HSTS 数据库通常不是一个好主意。

HSTS 输入行由由一个或多个空格分隔的多个字段组成:

имя_хоста ПРОБЕЛ порт ПРОБЕЛ включать_поддомены ПРОБЕЛ создано ПРОБЕЛ максимальный_возраст

Пол主机名和端口指定此 HSTS 策略应用的主机名和端口。 “端口”字段可以为空,并且在大多数情况下都会为空。 这意味着在决定是否应将 HSTS 策略应用于给定请求时,不会考虑端口号(仅评估主机名)。 当端口不为空时,将评估目标主机名和端口,并且仅当主机端口和文件中的端口匹配时才会应用 HSTS 策略。 此功能仅出于测试/开发目的而启用。 TestSuite WGET2(在 TestenV/ 中)使用显式端口创建 HSTS 数据库,以确保正确的 Wget2 行为。 将 HSTS 策略应用于非默认端口,RFC 6797(请参阅附录 B,“‘HSTS 策略和同源策略’之间的差异”)。 因此,不应在生产环境中使用此功能,并且该端口通常为空。

最后三个字段执行预期的操作。 “include_subdomains”字段可以是 1 或 0,它表示目标域的子域是否也应该成为此 HSTS 策略的一部分。 “created”和“max_age”字段包含创建记录时的时间戳(首次由 WGET 看到)和 HSTS 定义的值 max-age,它说明此 HSTS 策略保持活动状态的时间,以自上次创建时间戳(存储在“已创建”字段中)以来的秒数为单位。 一旦过了这个时间,该 HSTS 策略将不再有效,并最终从数据库中删除。

如果您通过选项提供自己的 HSTS 数据库 --hsts-file,请注意,如果远程服务器请求的 HSTS 策略与文件中的策略之间发生任何更改,WGET2 可能会更改提供的文件。 当 Wget2 退出时,它通过用新条目重写数据库文件来有效地更新 HSTS 数据库。

如果提供的文件不存在,WGET2 将创建它。 该文件将包含新的 HSTS 记录。 如果没有生成 HSTS 记录(任何服务器都没有发送“Strict-Transport-Security”标头),则不会创建该文件,即使它是空的。 此行为适用于默认数据库文件 (~/.wget-HSTS):直到某些服务器导致应用 HSTS 策略后才会创建该文件。

请注意不要覆盖其他 WGET2 进程同时对 HSTS 数据库所做的可能更改。 在刷新文件中更新的 HSTS 条目之前,WGET2 会重新读取该文件并合并更改。

使用自定义 HSTS 数据库和/或修改现有数据库。 有关此做法产生的潜在安全风险的更多信息,请参阅 RFC 6797 第 14 节“安全注意事项”,特别是第 14.9 节“HSTS 策略集的创造性操作”。

--hsts-preload
根据 libhsts 支持启用 HSTS 预加载列表的加载。 (默认:如果使用 Libhsts 构建则启用)。

--hsts-preload-file=file
如果 Wget2 是使用 libhsts 支持构建的,则 WGET2 使用安装程序提供的 HSTS 数据。 如果它未包含在发行版中或者您想上传自己的文件,请使用此选项。

此文件中的数据必须采用 DAFSA 格式,由 hsts-make-dafsa 包的 libhsts 程序生成。

--hpkp
启用 HTTP 公钥固定 (HPKP)(默认值:启用)。

这种首次使用信任 (TOFU) 机制为 HTTPS 添加了另一层安全性(请参阅 RFC 7469)。

先前建立的 TLS 会话的证书密钥数据将与当前数据进行比较。 如果两者不匹配,连接将被终止。

--hpkp-file=file
默认情况下,WGET2 将其 HPKP 数据存储在 $ xdg_data_home/wget/.wget-hpkp 中,或者,如果未设置 xdg_data_home,则存储在 ~/.lo-cal/wget/.wget-hpkp 中。 您可以使用 --hpkp-file 来覆盖此行为。

WGET2 将使用指定的文件作为 HPKP 数据库。 此类文件必须符合所使用的正确 HPKP 数据库格式
得到。 如果 WGET2 无法解析提供的文件,则行为未定义。

要禁用存储,请使用 --no-hpkp-file。

--tls-resume
启用 TLS 会话恢复,默认情况下处于禁用状态。

要恢复 TLS 会话,需要来自先前建立的 TLS 会话的数据。

TLS 1.2 会话恢复存在多个安全缺陷,详细解释 在地址

--tls-session-file=file
默认情况下,Wget2 将其 TLS 会话数据存储在 $xdg_data_home/wget/.wget-session 中,或者,如果未设置 xdg_data_home,则存储在
〜/.local/wget/.wget-session。 您可以使用 --tls-session-file 来覆盖它。

WGET2 将使用指定的文件作为 TLS 会话数据库。 此类文件必须符合 WGET 使用的正确 TLS 会话数据库格式。 如果 WGET2 无法解析提供的文件,则行为未定义。

要禁用持久存储,请使用 --no-tls-session-file

--tls-false-start
启用 TLS 假启动(默认值:启用)。

此选项减少了一次往返的 TLS 协商,从而加快了 HTTPS 连接的速度。

更多信息请访问 https://tools.ietf.org/html/rfc7918。

--check-hostname
启用 TLS SNI(服务器名称指示)验证(默认:启用)。

--ocsp
启用对服务器的 OCSP 访问,以检查服务器的 HTTPS 证书是否可以撤销(默认:启用)。

此过程非常慢(连接到服务器、HTTP 请求、响应),因此我们支持 OSCP 装订(服务器在 TLS 握手中发送 OCSP 响应)并提供持久的 OCSP 缓存。

--ocsp-date
检查 OCSP 响应是否太旧。 (默认:启用)

--ocsp-nonce
验证 OCSP 响应时允许检查随机数。 (默认:启用)

--ocsp-server
指定 OCSP 服务器地址(默认:证书中指定的 OCSP 服务器)。

--ocsp-stapling
启用 OCSP 装订支持(默认值:启用)。

--ocsp-file=file
默认情况下,WGET2 将其 TLS 会话数据存储在 $xdg_data_home/wget/.wget-ocsp или, если xdg_data_home не установлен, в ~/.local/wget/.wget-ocsp. Вы можете использовать --ocsp-file 来覆盖这个。

WGET2 将使用指定的文件作为 OCSP 数据库。 此类文件必须符合 WGET 使用的正确 OCSP 数据库格式。 如果 WGET2 无法解析提供的文件,则行为未定义。

要禁用持久 OCSP 缓存,请使用 --no-ocsp-file

--dane (实验特征)
启用对 DANE 证书验证的支持(默认值:禁用)。

如果由于缺少 CA 证书(例如空证书池)而导致服务器验证失败,此选项允许通过 DANE 验证 TLSA DNS 记录。

您应该安装 DNSSEC 以避免 MITM 攻击。 此外,必须为 DANE 配置目标 DNS 主机记录。

警告:此选项或其行为可能会更改或删除,恕不另行通知。

--http2
启用 HTTP/2 协议支持(默认:启用)。

Wget2 通过 ALPN 请求 HTTP/2。 如果可用,它会使用它而不是 HTTP/1.1。 一个连接内最多可以并行使用 30 个线程。

--http2-only

拒绝并仅使用 HTTP/2 连接,如果服务器不接受,则抛出错误。 主要用于测试。

--https-enforce=mode
设置如何处理未指定显式方案的 URL(具有 https:// 以外方案的 URL)(默认模式:无)

mode=none
在没有方案的 URL 中使用 HTTP 模式。 递归操作将使用父文档的架构。

mode=soft
如果未指定HTTP方案,请先尝试HTTPS。 如果有错误,则返回备份HTTP。

mode=hard
无论是否指定 HTTP 方案,仅使用 HTTPS。 不要回退到后备 HTTP。


插件选项

--list-plugins
打印所有可用插件的列表并退出。

--local-plugin=file
将文件作为插件上传。

--plugin=name
从配置中指定的插件目录加载具有指定名称的插件。

--plugin-dirs=directories
设置插件目录。 列表中的插件目录以逗号分隔。

--plugin-help
打印所有下载插件的帮助。

--plugin-opt=option
指定特定于插件的参数

插件参数“选项”以格式指定 <plugin_name>.<option>[=value]

环境:代理服务器

Wget2 支持通过 HTTP 和 HTTPS 这两种协议的检索代理。 指定 WGET 识别的代理位置的标准方法是使用以下环境变量:

  • http_代理
  • https_代理

如果指定,则 http_proxy 和 https_proxy 变量必须分别包含 HTTP 和 HTTPS 连接的代理 URL。

无代理

此变量应包含不应使用代理的域的逗号分隔列表。 例如,如果 no_proxy 的值为 .example.com,则代理将不会用于从 *.example.com 检索文档。

完成代码

如果遇到问题,WGET2 可以返回多个错误代码之一。

0 没有问题。
1 一般错误代码。
2 解析错误。 例如,解析命令行参数或 .wget2rc 或 .netrc 文件时出错...
3 文件输入/输出错误。
4.网络故障。
5 SSL 验证失败。
6 用户名/密码验证失败。
7 协议错误。
8 服务器响应错误代码。
9 密钥环中缺少公钥。
10 签名验证失败。

除 0 和 1 之外,当遇到多种错误类型时,小编号退出代码优先于大编号退出代码。

启动文件

Вы 您可能想要永久更改 GNU WGET2 的默认行为。 有一种比在 shell 中设置命令别名更好的方法来执行此操作。 GNU WGET2 允许您通过其 .WGET2RC 启动文件永久设置所有参数。

虽然 .WGET2RC 是 GNU WGET2 使用的主要初始化文件,但在此文件中存储密码并不是一个好主意。
这是因为启动文件可以在版本控制下公开读取或存档。 这就是为什么 WGET2 也会在需要时读取 $Home/.NETRC 文件的内容。

.WGET2RC 文件遵循与 .WGETRC 非常相似的语法,由 GNU WGET 读取。 它的不同之处仅在于 wget1.x 和 wget2 之间的命令行选项有所不同。

Wget2rc 的位置

初始化时,WGET2 将尝试读取“全局”启动文件,默认情况下该文件位于 /usr/local/etc/wget2rc' (или какой -то префикс, отличный от/usr/local'(如果 Wget2 没有安装在那里)。 全局启动文件对于系统管理员强制执行默认策略非常有用,例如设置证书存储路径、预加载 HSTS 列表等。

然后 Wget2 将查找用户初始化文件。 如果用户使用命令行选项 --config wget2 将尝试下载它指向的文件。 如果该文件不存在,或者无法读取,WGET2 将不再尝试读取任何初始化文件。

如果设置了 WGET2RC 环境变量,WGET2 将尝试从指定路径下载文件。 如果该文件不存在,或者无法读取,WGET2 将不再尝试读取初始化文件。

如果 -config 失败并且未安装 WGET2RC,WGET2 将尝试从 XDG 基目录规范中定义的位置加载用户初始化文件。 它将读取第一个且仅读取从以下位置找到的第一个文件:

1.$XDG_CONFIG_HOME/wget/wget2rc

2.$HOME/.config/wget/wget2rc

3.$HOME/.wget2rc

$home/.wget2rc 中的初始化文件位置已弃用。 如果在那里找到文件,WGET2 将打印有关该文件的警告。 将来将删除对此文件读取的支持。

用户设置在全局设置之后加载这一事实意味着,如果发生冲突,用户的 WGET2RC 将覆盖全局 WGET2RC。

错误

您可以通过 Gnu Wget2 Tracker (https://gitlab.com/gnuwget/wget2/issues) 提交错误报告。

在实际提交错误报告之前,请尝试遵循一些简单的准则。

  1. 请尝试找出您所看到的行为实际上是一个错误。 如果 Wget2 崩溃,那就是一个错误。 如果 Wget2 的行为与记录的不符,则这是一个错误。 如果事情工作得很奇怪,但你不确定它们应该如何工作,那么它很可能是一个错误,但你可能需要仔细检查文档和邮件列表。

  2. 尝试在最简单的情况下重现该错误。 例如。 如果 WGET2 在加载 WGET2 -RL0 -KKE -T5 --no-proxy https://example.com -o/tmp/log 时崩溃,您应该尝试查看崩溃是否再次发生,并且会使用一组更简单的选项发生。 您甚至可以尝试开始加载发生崩溃的页面,看看该页面是否以某种方式导致了崩溃。

另外,虽然我可能有兴趣了解 .WGET2RC 文件的内容,但将其转储到调试消息中可能是一个坏主意。 相反,您应该首先尝试查看如果 .WGET2RC 出现问题,错误是否会再次发生。 仅当事实证明 .wget2rc 设置导致错误时,请通过电子邮件将文件的相关部分发送给我。

  1. 请使用以下选项运行 wget2 -d 并将结果输出(或其相关部分)发送给我们。 如果 Wget2 是在没有调试支持的情况下编译的,请重新编译它。 使用调试来跟踪错误要容易得多。

笔记。 在将调试日志提交到错误地址之前,请务必从调试日志中删除任何潜在的敏感信息。 -D 不会特意收集敏感信息,但日志将包含 Wget2 与服务器通信的相当完整的转录,其中可能包括密码和部分下载数据。 由于错误地址是公开的,因此您可以假设所有错误报告都是公众可见的。

  1. 如果 Wget2 损坏,请尝试在 GDB 等调试器中运行它 What Wget core 并输入“where”以获取 Backtrace。 如果系统管理员禁用了核心文件,这可能不起作用,但尝试是安全的。

作者

Wget2,作者:Tim Ruehsen tim.ruehsen@gmx.de
Wget 1.x,最初由 Hrvoje Nikthić hniksic@xemacs.org 编写

版权

版权所有 (c) 2012-2015 蒂姆·鲁森

版权所有 (C) 2015-2022 自由软件基金会, Inc.

根据自由软件基金会发布的 GNU 许可证 1.3 版或任何更高版本的条款,授予复制、分发和/或修改本文档的许可;没有不变的部分,没有封面文本,也没有封底文本。 许可证副本包含在“GNU 自由文档许可证”部分中。

GNU Wget2 用户指南



相关出版物