文章

文章列表

Windows

Windows代理(proxy)设置

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 系统强制规范,而是许多网络工具(如 curlnpmpipgitwget 等)共同遵循的约定(源自 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_PROXYhttp_proxyhttp_ProXy 等是等效的。

  • 跨平台建议:为保持脚本在 Linux/macOS(区分大小写)上的兼容性,推荐统一使用小写http_proxyhttps_proxyall_proxyno_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 替换为你自己的代理软件地址和端口。

♾️ 方法二:永久设置(通过环境变量)

如果希望每次打开终端都能自动使用代理,可以将代理信息添加到系统的环境变量中。这样,所有新开的终端窗口都会自动应用该配置。

  1. 按下 Win + R 键,输入 sysdm.cpl 并回车,打开“系统属性”。
  2. 切换到“高级”选项卡,点击“环境变量”。
  3. 在“用户变量”或“系统变量”区域,点击“新建”。
  4. 分别创建以下两个变量:
    • 变量名HTTP_PROXY变量值http://127.0.0.1:7890
    • 变量名HTTPS_PROXY变量值http://127.0.0.1:7890
    • 变量名ALL_PROXY变量值http://127.0.0.1:7890
  5. 点击“确定”保存,并重启所有已打开的终端窗口使设置生效。

验证代理是否生效

windows下curl 和 curl.exe 的说明

在 Windows 系统中(尤其是 PowerShell 环境下),curlcurl.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 200HTTP/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 → 代理”中开启“使用代理服务器”。这种方法主要影响使用系统设置的应用程序(如浏览器),对大部分终端命令不直接生效
  • 为特定工具单独配置:一些工具支持独立配置,例如:
    • Gitgit config --global http.proxy http://127.0.0.1:7890
    • npmnpm config set proxy http://127.0.0.1:7890
  • 重要提醒
    • 代理类型:请确认你的代理软件支持的是 HTTP 代理还是 SOCKS5 代理,环境变量方式通常只支持 HTTP 代理。
    • 安全警告:避免将包含用户名和密码的代理信息直接写入环境变量或脚本中,这存在安全风险。险。
本文由作者按照 CC BY 4.0 进行授权