将开发代理与 PowerShell 配合使用

概览
目标: 将 PowerShell 配置为使用开发代理
时间: 5 分钟
先决条件:设置开发代理

Dev Proxy 适用于所有操作系统上的 PowerShell。 在 macOS 和 Linux 上,PowerShell 正确检测系统代理更改,无需额外配置。 在 Windows 上,PowerShell 缓存代理设置,这需要额外的步骤。

macOS 和 Linux

在 macOS 和 Linux 上,PowerShell 会自动检测系统代理更改。 像平时一样启动开发代理并使用 PowerShell — 请求会被截获,无需任何额外的配置。

Windows操作系统

在 Windows 上将开发代理与 PowerShell 配合使用时,可能会遇到 PowerShell 在系统代理启动或停止时无法检测到的问题。 此问题影响 Windows PowerShell (5.1) 和 PowerShell 7+ (核心)。

问题

在 Windows 上,PowerShell 会话在启动时缓存系统代理设置。 这意味着,如果你:

  1. 打开 PowerShell 会话
  2. 启动开发代理(将自身配置为系统代理)
  3. 从原始 PowerShell 会话发出 HTTP 请求

请求不会通过开发代理路由,因为 PowerShell 使用会话启动时的缓存代理设置。

同样,如果你:

  1. 启动开发代理
  2. 打开 PowerShell 会话并发出请求(这些请求会被正确拦截)
  3. 停止开发代理
  4. 从同一 PowerShell 会话发出请求

请求失败,因为 PowerShell 仍尝试使用不再存在的代理。

解决方法:重启 PowerShell 会话

最简单的解决方法是在启动或停止开发代理后重启 PowerShell 会话。 重新启动会话可确保 PowerShell 获取当前系统的代理设置。

替代方法:手动设置代理

可以将开发代理配置为不注册为系统代理并在 PowerShell 中手动设置代理,而不是依赖于系统代理检测。

步骤 1:在没有系统代理的情况下启动开发代理

使用 --as-system-proxy false 选项启动开发代理。

devproxy --as-system-proxy false

步骤 2:在 PowerShell 中设置代理环境变量

在 PowerShell 会话中,设置 HTTPS_PROXY 环境变量:

$env:HTTPS_PROXY = "http://127.0.0.1:8000"

如果还需要截获 HTTP 请求:

$env:HTTP_PROXY = "http://127.0.0.1:8000"

步骤 3:完成后清除代理

在完成使用Dev Proxy之后,请清除环境变量:

$env:HTTPS_PROXY = $null
$env:HTTP_PROXY = $null

使用 PowerShell 配置文件

为了简化代理设置,可以在 PowerShell 配置文件中创建函数。 将以下内容添加到 $PROFILE 文件:

function Set-DevProxy {
    $env:HTTP_PROXY = "http://127.0.0.1:8000"
    $env:HTTPS_PROXY = "http://127.0.0.1:8000"
    Write-Host "Dev Proxy enabled"
}

function Clear-DevProxy {
    $env:HTTP_PROXY = $null
    $env:HTTPS_PROXY = $null
    Write-Host "Dev Proxy disabled"
}

然后,您可以在 PowerShell 会话中使用 Set-DevProxyClear-DevProxy 命令来快速启用或禁用代理。