Windows代理(proxy)设置
Windows代理(proxy),临时设置、永久设置。
概述
在 Windows 终端(CMD、PowerShell)中运行网络相关命令时,若需要通过代理访问互联网(如公司内网、科学上网),可通过设置环境变量实现。 核心变量为:
HTTP_PROXY/http_proxy—— 针对 HTTP 请求HTTPS_PROXY/https_proxy—— 针对 HTTPS 请求ALL_PROXY/all_proxy—— 后备代理(可选)NO_PROXY/no_proxy—— 不走代理
注意:这些变量并非 Windows 系统强制规范,而是许多网络工具(如
curl、npm、pip、git、wget等)共同遵循的约定(源自 cURL 等开源项目)。是否生效取决于具体程序是否读取这些变量。
变量详解
HTTP_PROXY 与 HTTPS_PROXY
作用:分别指定 HTTP 和 HTTPS 协议的代理地址。
推荐做法:即使两者相同,也建议分别设置,确保兼容性。
值格式:
http://[user:password@]host:port(可包含认证信息,但不安全,不建议明文写密码)。
ALL_PROXY
作用:当 HTTP_PROXY 和 HTTPS_PROXY 均未设置时,用作后备代理。
注意:
并非所有程序都支持 ALL_PROXY,但许多主流工具(如 curl、npm、pip)支持。
值中可以指定协议类型,如
socks5://127.0.0.1:1080(若工具支持 SOCKS5)、http://、https://。优先级低于 HTTP_PROXY、HTTPS_PROXY。
NO_PROXY
作用:指定不走代理的地址列表(如内网域名、IP)。
格式:逗号分隔的域名或 IP,支持通配符(具体支持程度因工具而异)。
示例:localhost,127.0.0.1,192.168.*,.local。
设置方法:同上述变量,添加名为 NO_PROXY 或 no_proxy 的环境变量。
大小写是否敏感?
在 Windows 中:环境变量名不区分大小写,
HTTP_PROXY、http_proxy、http_ProXy等是等效的。跨平台建议:为保持脚本在 Linux/macOS(区分大小写)上的兼容性,推荐统一使用小写(
http_proxy、https_proxy、all_proxy、no_proxy)。多数程序会同时检查大小写变体,但小写是更通用的实践。
设置代理的方法
在 Windows 终端中设置代理,主要有临时生效和永久生效两种方式,你可以根据实际需求灵活选择。
⏳ 方法一:临时设置(仅当前会话生效)
这种方式简单快捷,适合临时测试。设置的变量仅对当前打开的终端窗口有效,关闭窗口后即失效。
- 在 CMD 中: 设置变量:
1 2 3 4 5 6 7
set http_proxy=http://127.0.0.1:7890 set https_proxy=http://127.0.0.1:7890 set all_proxy=http://127.0.0.1:7890 set HTTP_PROXY="http://127.0.0.1:7890" set HTTPS_PROXY="http://127.0.0.1:7890" set ALL_PROXY="http://127.0.0.1:7890"
取消变量:
1 2 3 4 5 6 7
set http_proxy= set https_proxy= set all_proxy= set HTTP_PROXY= set HTTPS_PROXY= set ALL_PROXY=
- 在 PowerShell 中: 设置变量:
1 2 3 4 5 6 7
$env:http_proxy="http://127.0.0.1:7890" $env:https_proxy="http://127.0.0.1:7890" $env:all_proxy="http://127.0.0.1:7890" $env:HTTP_PROXY="http://127.0.0.1:7890" $env:HTTPS_PROXY="http://127.0.0.1:7890" $env:ALL_PROXY="http://127.0.0.1:7890"
取消变量:
1 2 3 4 5 6 7
Remove-Item Env:http_proxy Remove-Item Env:https_proxy Remove-Item Env:all_proxy Remove-Item Env:HTTP_PROXY Remove-Item Env:HTTPS_PROXY Remove-Item Env:ALL_PROXY
请注意:请将命令中的
127.0.0.1:7890替换为你自己的代理软件地址和端口。
♾️ 方法二:永久设置(通过环境变量)
如果希望每次打开终端都能自动使用代理,可以将代理信息添加到系统的环境变量中。这样,所有新开的终端窗口都会自动应用该配置。
- 按下
Win + R键,输入sysdm.cpl并回车,打开“系统属性”。 - 切换到“高级”选项卡,点击“环境变量”。
- 在“用户变量”或“系统变量”区域,点击“新建”。
- 分别创建以下两个变量:
- 变量名:
HTTP_PROXY,变量值:http://127.0.0.1:7890 - 变量名:
HTTPS_PROXY,变量值:http://127.0.0.1:7890 - 变量名:
ALL_PROXY,变量值:http://127.0.0.1:7890。
- 变量名:
- 点击“确定”保存,并重启所有已打开的终端窗口使设置生效。
验证代理是否生效
windows下curl 和 curl.exe 的说明
在 Windows 系统中(尤其是 PowerShell 环境下),curl 和 curl.exe 不是同一个程序:
curl.exe:才是真正的、原生的 cURL 可执行文件,完全兼容 Linux 下的curl命令,会读取 HTTP_PROXY 等环境变量。curl(在 PowerShell 中):是Invoke-WebRequest命令的内置别名。它是 PowerShell 自带的 cmdlet,不会读取 HTTP_PROXY 环境变量(它走的是 Windows 系统代理设置或忽略代理)。
而在传统的 CMD (命令提示符) 中,curl 默认指向 curl.exe,不存在这个问题。
使用 curl.exe
powershell:
1
2
3
4
curl.exe -I http://www.google.com
curl.exe -I https://www.google.com
# 不加 http、https 也可以
curl.exe -I www.google.com
cmd中可以直接用curl。
若返回正常 HTTP 响应头(如 HTTP/2 200、HTTP/1.1 200 OK),则表示代理生效。
查看当前环境变量
- CMD:
set http_proxy - PowerShell:
Get-ChildItem Env:http_proxy
检查代理连接
1
curl.exe -x http://127.0.0.1:7890 https://api.ip.sb/ip
可返回通过代理后的出口 IP。
💡 补充:其他设置方式与注意事
- 与 Windows 系统代理同步:在“设置 → 网络和 Internet → 代理”中开启“使用代理服务器”。这种方法主要影响使用系统设置的应用程序(如浏览器),对大部分终端命令不直接生效。
- 为特定工具单独配置:一些工具支持独立配置,例如:
- Git:
git config --global http.proxy http://127.0.0.1:7890 - npm:
npm config set proxy http://127.0.0.1:7890
- Git:
- 重要提醒:
- 代理类型:请确认你的代理软件支持的是 HTTP 代理还是 SOCKS5 代理,环境变量方式通常只支持 HTTP 代理。
- 安全警告:避免将包含用户名和密码的代理信息直接写入环境变量或脚本中,这存在安全风险。险。