通过


使用系统代理选项

概览
目标: 控制开发代理是捕获所有系统流量还是仅显式路由流量
时间: 5 分钟
先决条件:设置开发代理

默认情况下,启动开发代理时,它会自行注册为系统代理。 因此,计算机上的所有 HTTP/HTTPS 流量都通过开发代理自动路由。 通过开发代理对所有流量进行代理对于大多数场景非常有效——启动开发代理后,它会自动立即捕获来自应用程序的请求,无需任何额外的配置。

但是,在某些情况下,你可能希望更精确地掌控哪些流量通过 Dev Proxy。 使用 asSystemProxy 此选项可以禁用自动系统代理注册,从而可以精细控制哪些应用程序使用开发代理。

何时禁用系统代理注册

请考虑在asSystemProxy以下情况下设置false

  • 你正在 一个企业网络上,此网络具有你不想更改的现有代理设置
  • 你只想测试特定应用程序 ,而不会影响计算机上运行的其他应用
  • 当开发代理截获其流量(例如 Azure Functions)时,其他应用程序会失败
  • 你正在运行多个开发代理的实例,并希望将流量路由到特定实例
  • 你希望最大程度地减少 对系统服务和后台进程的干扰

配置系统代理选项

可以通过两种方式配置 asSystemProxy 选项:使用配置文件或命令行。

配置文件

若要永久禁用系统代理注册,请将 asSystemProxy 设置添加到配置文件。

文件:devproxyrc.json
目的: 禁用自动系统代理注册

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
  "asSystemProxy": false,
  "urlsToWatch": [
    "https://api.contoso.com/*"
  ]
}

命令行

若要禁用单个会话的系统代理注册,请使用 --as-system-proxy 此选项。

devproxy --as-system-proxy false

手动将流量路由到开发代理服务器

禁用系统代理注册时,应用程序不会自动通过开发代理路由其流量。 需要将每个应用程序配置为显式使用开发代理(Dev Proxy)。

使用环境变量

将流量路由到开发代理的最常见方法是设置 HTTPS_PROXY 环境变量。

PowerShell:

$env:HTTPS_PROXY = "http://127.0.0.1:8000"
node app.js

命令提示符:

set HTTPS_PROXY=http://127.0.0.1:8000
node app.js
HTTPS_PROXY=http://127.0.0.1:8000 node app.js

小窍门

某些应用程序还支持 HTTP_PROXY 环境变量。 如果您的应用程序同时进行 HTTP 和 HTTPS 请求,请同时设置这两种配置。

特定于语言的配置

不同的编程语言和框架具有自己的代理配置方式:

示例:在不干扰启动的情况下测试 Azure Functions

Azure Functions 使用 gRPC 进行内部通信,当将开发代理服务器注册为系统代理时将会失败。 若要将开发代理与 Azure Functions 配合使用,请禁用系统代理注册并通过环境变量配置代理。

文件:devproxyrc.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
  "asSystemProxy": false,
  "urlsToWatch": [
    "https://jsonplaceholder.typicode.com/*"
  ]
}

文件:local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "HTTPS_PROXY": "http://127.0.0.1:8000"
  }
}

使用此配置,Azure Functions 可以正常启动,并将对受监视 URL 的 HTTP 请求通过 Dev Proxy 进行路由。

示例:测试一个应用程序,同时使其他应用程序不受影响

同时开发多个应用程序时,可能需要仅将开发代理与其中一个应用程序一起使用。 禁用系统代理注册,并仅为目标应用程序设置环境变量。

在没有系统代理注册的情况下启动开发代理:

devproxy --as-system-proxy false

在单独的终端中,使用配置的代理运行应用程序:

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

计算机上的其他应用程序继续正常运行,没有任何代理干扰。

运行多个开发代理实例

设置为 asSystemProxyfalse时,可以同时运行多个开发代理实例。 每个实例侦听其自己的端口,并使用每个实例状态文件跟踪自己的状态。

启动多个实例

在不同的端口上启动每个实例:

devproxy --as-system-proxy false --port 8000 --config-file devproxyrc-api1.json

在另一个终端中:

devproxy --as-system-proxy false --port 9000 --config-file devproxyrc-api2.json

检查正在运行的实例的状态

若要查看所有正在运行的实例,请使用 status 以下命令:

devproxy status

停止特定实例

若要以特定实例为目标,请使用 --pid 命令中的 stop 选项:

devproxy stop --pid 6456

停止所有正在运行的实例:

devproxy stop

查看特定实例中的日志

使用 --pid 选项与 logs 命令一起:

devproxy logs --pid 6456

注释

一次只能将一个开发代理实例注册为系统代理。 如果尝试在已经有一个系统代理实例运行时启动一个新实例并设置asSystemProxytrue,Dev Proxy将阻止启动。

另请参阅