核心要点
- 命令行参数是无需修改系统设置、快速为单次下载指定代理路径的方式。
- 修改配置文件可设置永久代理,省去每次输入长命令的麻烦。
- 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 代理配置方式?
命令行参数
单次下载
不留下任何永久配置痕迹
多次下载时操作繁琐
环境变量
单个终端会话
无需修改系统文件即可影响多条命令
关闭终端后设置即消失
用户级 .wgetrc
长期日常使用
为您的用户账户自动应用于 Wget 下载
若使用身份认证,密码将以明文存储
系统级 /etc/wgetrc
服务器全局配置
为系统中所有 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 指令。