背景

在 Windows 上使用 patchright install chromium 等需要网络下载的工具时,经常需要通过代理访问外网。但很多朋友搞不清楚 CMDPowerShell 设置代理的语法区别,导致代理不生效。本文一次性讲清楚两者的正确写法。

CMD 设置代理

如果你当前打开的是 命令提示符(CMD),使用 set 命令:

set HTTP_PROXY=http://127.0.0.1:7897
set HTTPS_PROXY=http://127.0.0.1:7897

验证代理是否生效

echo %HTTP_PROXY%
echo %HTTPS_PROXY%

正常应输出:

http://127.0.0.1:7897
http://127.0.0.1:7897

PowerShell 设置代理

如果你打开的是 PowerShell,语法完全不同,需要用到 $env: 前缀:

$env:HTTP_PROXY="http://127.0.0.1:7897"
$env:HTTPS_PROXY="http://127.0.0.1:7897"

或者一行搞定:

$env:HTTP_PROXY="http://127.0.0.1:7897";$env:HTTPS_PROXY="http://127.0.0.1:7897"

验证代理是否生效

$env:HTTP_PROXY
$env:HTTPS_PROXY

⚠️ 常见错误:很多人在 PowerShell 里用 set 命令,这在 PowerShell 里是无效的!set 是 CMD 的语法,PowerShell 必须用 $env:变量名="值"

永久设置代理(Windows)

以上方法只在当前终端窗口有效,关闭窗口后失效。如果要永久生效:

CMD 中永久设置

setx HTTP_PROXY "http://127.0.0.1:7897"
setx HTTPS_PROXY "http://127.0.0.1:7897"

执行后需要重新打开终端才能生效。

完整代理设置(推荐)

如果你用的是 Clash Verge、Clash Meta、Mihomo 等代理工具,建议同时设置 ALL_PROXY

CMD 完整版

set HTTP_PROXY=http://127.0.0.1:7897
set HTTPS_PROXY=http://127.0.0.1:7897
set ALL_PROXY=http://127.0.0.1:7897

PowerShell 完整版

$env:HTTP_PROXY="http://127.0.0.1:7897"
$env:HTTPS_PROXY="http://127.0.0.1:7897"
$env:ALL_PROXY="http://127.0.0.1:7897"

💡 有些工具需要 SOCKS5 代理,可以将 ALL_PROXY 设为 socks5://127.0.0.1:7897

测试代理是否生效

curl https://www.google.com

如果能返回 HTML 内容,说明代理已生效,可以继续执行:

patchright install chromium

CMD vs PowerShell 对照表

操作 CMD PowerShell
设置变量 set VAR=value $env:VAR="value"
查看变量 echo %VAR% $env:VAR
永久设置 setx VAR "value" [Environment]::SetEnvironmentVariable(...)
多行合并 不支持 $a="1";$b="2"

如果还报错,排查清单

执行 patchright install chromium 如果仍然失败,按以下顺序排查:

  1. 代理没生效 — 用 curl https://www.google.com 测试
  2. Playwright CDN 被墙 — 检查是否能访问 Playwright 的下载地址
  3. Chromium 下载失败 — 检查网络连通性和磁盘空间
  4. Patchright 版本问题 — 尝试升级/降级 patchright 版本
  5. SSL 证书问题 — 检查系统时间是否正确,或尝试关闭 SSL 验证(不推荐)

小结

  • CMDset,引用变量用 %变量名%
  • PowerShell$env:变量名不要用 set
  • 临时使用用终端内设置,长期使用用 setx 或系统环境变量
  • 建议同时设置 HTTP_PROXYHTTPS_PROXYALL_PROXY