背景
在 Windows 上使用 patchright install chromium 等需要网络下载的工具时,经常需要通过代理访问外网。但很多朋友搞不清楚 CMD 和 PowerShell 设置代理的语法区别,导致代理不生效。本文一次性讲清楚两者的正确写法。
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 如果仍然失败,按以下顺序排查:
- 代理没生效 — 用
curl https://www.google.com测试 - Playwright CDN 被墙 — 检查是否能访问 Playwright 的下载地址
- Chromium 下载失败 — 检查网络连通性和磁盘空间
- Patchright 版本问题 — 尝试升级/降级 patchright 版本
- SSL 证书问题 — 检查系统时间是否正确,或尝试关闭 SSL 验证(不推荐)
小结
- CMD 用
set,引用变量用%变量名% - PowerShell 用
$env:变量名,不要用 set - 临时使用用终端内设置,长期使用用
setx或系统环境变量 - 建议同时设置
HTTP_PROXY、HTTPS_PROXY、ALL_PROXY