返回博客

如何为 Wget 配置代理:命令与示例

-
目录
-

核心要点

  • 命令行参数是无需修改系统设置、快速为单次下载指定代理路径的方式。
  • 修改配置文件可设置永久代理,省去每次输入长命令的麻烦。
  • Wget 并不原生支持 SOCKS5 代理,需要借助 Proxychains 这类工具来处理此类连接。

GNU Wget 是一种可靠的网络文件下载工具,能够轻松配合代理隐藏 IP 地址或绕过本地封锁。您可以通过三种方式让流量经代理转发:在命令中添加参数、设置临时的 Shell 变量,或将代理信息永久保存在配置文件中。

wget -e use_proxy=yes -e http_proxy=http://192.168.1.100:8080 https://httpbin.org/

方法一:为单条 Wget 命令使用代理

若想在不改动系统代理设置的情况下,让单次下载经代理服务器转发,只需在 Wget 命令中添加特定参数;下载完成后参数即消失,不会残留任何配置。

使用 HTTP 代理

使用执行参数(-e)两次传入代理信息:一次用于启用代理功能,另一次用于设置代理地址和端口。

wget -e use_proxy=yes -e http_proxy=http://HOST:PORT https://httpbin.org/

为 HTTPS 请求使用代理

加密连接需要使用 https_proxy 变量,但请注意代理地址本身仍以 http:// 开头。Wget 会先以明文方式连接代理,再通过 HTTP CONNECT 方法与目标建立加密隧道。只有当您的代理供应商明确提供支持 TLS 终止的代理端点时,才应使用 https://。

wget -e use_proxy=yes -e https_proxy=http://HOST:PORT https://httpbin.org/

使用需身份认证的代理

如果代理需要身份验证,请在配置代理时分别添加用户名和密码参数。请注意,直接在终端中输入明文密码会在 Shell 历史记录中留下永久痕迹。

wget -e use_proxy=yes -e http_proxy=http://HOST:PORT --proxy-user=USER --proxy-password=PASS https://httpbin.org/

方法二:设置 Wget 代理环境变量

若需要在同一终端会话中执行多次下载,可将代理地址等配置信息导出为 GNU Wget 的环境变量,无需为每条命令重复输入参数,且关闭终端窗口后设置会自动清除。

Linux 与 macOS

使用 export 命令将代理地址赋值给标准环境变量,Wget 及大多数命令行工具都会自动读取这些变量。

export http_proxy="http://HOST:PORT"
export https_proxy="http://HOST:PORT"

让代理变量持久生效

若想每次打开终端时自动加载这些变量,可将 export 命令写入 .bashrc 或 .zshrc 等 Shell 配置文件,系统启动时便会自动应用这些设置。

Windows PowerShell

在 Windows 系统中,可直接使用 PowerShell 设置会话级变量。

$env:http_proxy="http://HOST:PORT"
$env:https_proxy="http://HOST:PORT"

方法三:在 wgetrc 中配置代理

若想默认启用代理,可将相关设置写入 wgetrc 文件,这样配置便会永久生效,无需每次运行 Wget 时管理 Shell 变量或输入冗长的参数。

为当前用户配置代理

若只想为自己的账户应用代理设置,可创建或编辑隐藏的 .wgetrc 文件,作为 GNU Wget 代理配置的一部分。

# ~/.wgetrc
use_proxy = on
http_proxy = http://HOST:PORT
https_proxy = http://HOST:PORT

配置系统级代理

若想让所有用户都应用这些设置,需修改全局的 /etc/wgetrc 文件;但编辑该配置需要更高权限,且更改会影响该设备上所有运行 Wget 的用户。

在 wgetrc 中添加代理身份认证信息

如果代理需要身份验证,可直接将用户名和密码写入代理服务器的配置文件。由于密码以明文形式存储,请务必限制 .wgetrc 文件的读取权限,以防止未经授权的访问。

use_proxy = on
http_proxy = http://HOST:PORT
proxy_user = YOUR_USERNAME
proxy_password = YOUR_PASSWORD

该选择哪种 Wget 代理配置方式?

为 Wget 下载任务配置稳定高速的代理

获取数据中心代理

如何检查 Wget 是否正在使用代理

使用标准 Wget 命令访问一个可返回公网 IP 地址的服务,即可检查代理服务器是否正常工作。先不带代理运行命令,查看您原本的 IP 地址,再加上代理参数重新运行;第二次输出结果应显示代理的 IP 地址。

wget -qO- https://api.ipify.org
wget -qO- -e use_proxy=yes -e https_proxy=http://HOST:PORT https://api.ipify.org

使用 no_proxy 让特定主机绕过代理

如果在启用全局代理的同时需要从本地服务器下载文件,可使用 no_proxy 变量,将需要排除的域名或 IP 地址以逗号分隔列出。

export no_proxy="localhost,127.0.0.1,internal.local"

Wget 支持 SOCKS5 代理吗?

Wget 原生仅支持 HTTP、HTTPS 和 FTP 协议,无法直接与 SOCKS5 代理通信。若需通过 SOCKS 隧道转发流量,必须借助第三方工具。

配合 Proxychains 使用 Wget

Proxychains 在系统层面拦截网络调用,并将其转发至您配置的代理。只需在标准 Wget 命令前加上 proxychains 即可。

proxychains wget https://httpbin.org/

何时换用其他工具更合适

如果需要原生 SOCKS5 支持或复杂的身份认证,不妨考虑换用其他工具,可参阅我们的cURL 与 Wget 对比指南,了解 cURL 如何无需借助外部工具便可原生处理高级连接。

Wget 代理常见错误及解决方法

407 Proxy Authentication Required

这表示代理需要有效的身份凭证,您可能输错或提供了错误的用户名密码。请检查用户名和密码,并确认格式与代理供应商的要求完全一致。

连接被拒绝

这通常表示代理服务器处于离线状态、防火墙阻止了连接,或是主机与端口填写有误。请核对代理服务器的 IP 地址和端口号,并确认该代理服务器在您的网络环境中可正常访问。

Wget 未使用代理

如果 Wget 直接连接目标而未经代理,可能是对 HTTPS 地址错误地使用了 http_proxy 变量。请确认加密连接使用的是 https_proxy,同时检查目标域名是否被误列入 no_proxy 环境变量。

HTTPS 证书错误

如果代理执行了 SSL 检测,会返回一个 Wget 无法原生识别的证书。您可以添加 --no-check-certificate 参数绕过该安全检查,但请注意这样做会使您面临中间人攻击的风险。

代理连接超时

这通常表示代理无法访问,或您的网络连接已中断。您可以尝试 ping 代理的 IP 地址以检查其是否在线,但请注意许多服务器会屏蔽 ping 请求。如果确认代理在线,目标网站可能已完全屏蔽该代理网络。

Wget 代理命令速查表

单次 HTTP 代理:

wget -e use_proxy=yes -e http_proxy=http://HOST:PORT https://httpbin.org/

HTTPS 代理:

wget -e use_proxy=yes -e https_proxy=http://HOST:PORT https://httpbin.org/

身份认证代理:

wget -e use_proxy=yes -e http_proxy=http://HOST:PORT --proxy-user=USER --proxy-password=PASS https://httpbin.org/

环境变量:

export http_proxy="http://HOST:PORT"
export https_proxy="http://HOST:PORT"

Wgetrc:

use_proxy = on
http_proxy = http://HOST:PORT
https_proxy = http://HOST:PORT

No_proxy:

export no_proxy="localhost,127.0.0.1"

结语

配置 Wget 代理服务器可以隐藏本地 IP 地址,并让流量经由自定义网关转发。虽然 Wget 在原生 SOCKS5 支持方面存在一定局限,但环境变量与配置文件仍能为不同网络环境提供充分的灵活性。

如果您需要在终端工作流程中使用可靠的代理服务,MarsProxies等供应商可提供兼容的网关。

常见问题

如何在 Wget 中使用代理?

在命令中添加 -e use_proxy=yes 和 -e http_proxy=http://HOST:PORT 参数,即可让下载经代理转发。

如何在 Wget 代理中使用用户名和密码?

在命令中直接添加 --proxy-user=USERNAME 和 --proxy-password=PASSWORD 参数,或将其写入 .wgetrc 配置文件。

在 Wget 中应使用 http_proxy 还是 https_proxy?

标准的非加密 HTTP 流量使用 http_proxy,加密的 HTTPS 连接使用 https_proxy。

如何在 Wget 中禁用代理?

在特定下载中添加 --no-proxy 参数,即可绕过当前生效的代理配置,直接连接目标服务器。

为什么 Wget 没有使用我的代理?

这通常是配置冲突所致:wgetrc 文件中的设置会静默覆盖环境变量,而命令行参数又会覆盖两者。另请检查 wgetrc 文件中是否存在 use_proxy = on 指令。

了解更多
-

相关文章