通过


对开发代理服务器进行故障排除

使用本指南诊断和修复常见的开发代理问题。 从症状开始,通过诊断问题查找解决方案。

症状:开发代理未能拦截请求

你已启动开发代理,但应用的请求不会显示在开发代理输出中。 请通过这些问题来确定原因。

开发代理是否正在运行?

检查开发代理(Dev Proxy)是否正在运行并已准备好截获请求。

需要关注什么:

启动Dev Proxy后,应会看到类似于:

 info    Dev Proxy API listening on http://127.0.0.1:8897...
 info    Dev Proxy listening on 127.0.0.1:8000...

Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy

如果未看到此输出:

开发代理是否注册为系统代理?

必须将开发代理注册为系统代理才能自动截获请求。 如果不是,你的应用的请求将完全绕过开发代理。

如何在 macOS 上检查:

  1. 打开 系统设置>网络
  2. 选择活动网络连接
  3. 转到 详细信息...>代理
  4. 查找 安全 HTTP 代理(HTTPS),设置为127.0.0.1:8000

如何在 Windows 上检查:

  1. 打开 设置>网络和 Internet>代理
  2. “手动代理设置”下,检查代理服务器是否已设置为 127.0.0.1:8000

如果未将开发代理注册为系统代理:

检查开发代理配置。 运行 devproxy config 以打开配置文件并验证它不包含:

{
  "asSystemProxy": false
}

如果此设置存在且设置为 false,请将其删除或设置为 true,然后重启开发代理。

是否正在观看正确的 URL?

开发代理仅会拦截与urlsToWatch配置中所定义模式相匹配的URL请求。

检查方法:

  1. 查看开发人员代理启动输出以获取要监视的 URL 列表
  2. 将其与应用正在调用的 URL 进行比较

常见问题:

  • 缺少通配符https://api.example.com 不匹配 https://api.example.com/users。 请改用 https://api.example.com/*
  • 错误的域:仔细检查域名,包括子域
  • HTTP 与 HTTPS:确保协议匹配

测试你的 URL 模式:

devproxy --urls-to-watch "https://your-api.com/*"

然后向 API 发出请求,并检查开发代理是否记录它。

是否使用正确的配置文件?

开发代理可能使用的是与预期不同的配置文件。

开发代理如何查找配置文件:

  1. 如果指定 --config-file,则开发代理使用该文件
  2. 否则,开发代理在当前目录中查找devproxyrc.json
  3. 如果未找到,开发代理将使用默认设置

若要验证正在使用哪个配置文件,请执行以下作:

在调试日志模式下运行 Dev Proxy:

devproxy --log-level debug

查找显示加载配置文件的输出。

若要显式指定配置文件,请执行以下作:

devproxy --config-file ./my-config.json

是否将开发代理与 Node.js 应用程序配合使用?

Node.js 不会自动使用系统代理设置。 需要将 Node.js 应用配置为显式使用代理。

Solution:

使用 global-agent 包或配置 HTTP 库以使用代理。 有关详细说明,请参阅 将开发代理与 Node.js 应用程序 配合使用。

使用全局代理快速修复:

  1. 安装 global-agent:

    npm install global-agent
    
  2. 添加到应用的入口点:

    import { bootstrap } from 'global-agent';
    bootstrap();
    
  3. 使用代理环境变量启动应用:

    NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node app.js
    

是否在 Windows 上将开发代理与 PowerShell 配合使用?

PowerShell 不会自动将系统代理设置用于发出的使用 Invoke-WebRequestInvoke-RestMethod 的网络请求。

Solution:

通过设置 -Proxy 参数将 PowerShell 配置为使用代理:

Invoke-WebRequest -Uri "https://api.example.com/data" -Proxy "http://127.0.0.1:8000"

或者可以为整个会话设置代理:

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

如果使用的是 PowerShell 7+,还可以使用:

[System.Net.WebRequest]::DefaultWebProxy = New-Object System.Net.WebProxy("http://127.0.0.1:8000")

其他平台和框架

如果使用的是其他平台,请查看以下指南:

平台 Guide
.NET 应用程序 将开发代理与 .NET 应用程序配合使用
.NET 4.8 应用程序 .NET 4.8 应用需要特殊配置
Docker 容器 在 Docker 容器中使用开发代理
SharePoint 框架 将开发代理与 SPFx 配合使用

症状:请求被截获,但传递时未更改

开发代理会在输出中显示您的请求,但它们没有被修改、仿真或返回模拟错误。

插件是否已启用?

检查您要使用的插件在您的配置中已启用。

检查方法:

打开配置文件并验证:

  1. 插件列在 plugins 数组中
  2. 插件具有 "enabled": true
{
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    }
  ]
}

插件的顺序是否正确?

插件顺序在开发代理工具中很重要。 插件按列出的顺序执行,某些插件可能会在其他插件运行之前停止处理。

常见问题:

如果你在GenericRandomErrorPlugin之前有MockResponsePlugin,并且模拟与请求匹配,则随机错误插件永远不会运行。

Solution:

按照希望插件处理请求的顺序排列插件。 有关详细信息,请参阅为什么在使用模拟时不引发随机错误?

模拟 URL 模式是否与请求匹配?

对于模拟响应,URL 模式必须与请求 URL 完全匹配。

要检查的事项:

  • 查询字符串参数: https://api.example.com/users?id=1 不匹配 https://api.example.com/users
  • 尾部斜杠: https://api.example.com/users/ 不匹配 https://api.example.com/users
  • 区分大小写:URL 路径区分大小写

请求方法是否正确?

模拟是针对具体方法的。 对 GET 请求的模拟与 POST 请求不匹配。

检查方法:

在模拟文件中,验证 method 属性是否与请求匹配:

{
  "request": {
    "url": "https://api.example.com/users",
    "method": "GET"
  },
  "response": {
    "statusCode": 200,
    "body": { "users": [] }
  }
}

症状:应用中的 SSL/证书错误

尝试通过开发代理发出请求时,应用会引发 SSL 或证书错误。

是否安装了开发代理证书?

开发代理使用自签名证书来解密 HTTPS 流量。 系统必须信任此证书。

Solution:

运行证书安装命令:

devproxy cert ensure

此命令在系统上安装和信任开发代理证书。

证书是否受信任?

证书可能已安装,但不受信任。

如何在 macOS 上检查:

  1. 打开 密钥链访问
  2. 搜索“开发代理”
  3. 双击证书
  4. 展开 信任
  5. 验证 安全套接字层 (SSL) 是否设置为 Always Trust

如何在 Windows 上检查:

  1. 运行 certmgr.msc
  2. 导航到 受信任的根证书颁发机构>证书
  3. 查找开发代理证书

如果证书不受信任:

删除并重新安装证书:

devproxy cert remove
devproxy cert ensure

你使用的是 Node.js吗?

默认情况下,Node.js 不使用系统证书存储。 要么需要:

选项 1:禁用证书验证(仅开发):

NODE_TLS_REJECT_UNAUTHORIZED=0 node app.js

警告

切勿在生产环境中使用 NODE_TLS_REJECT_UNAUTHORIZED=0 。 它禁用所有证书验证。

选项 2:将开发代理证书添加到 Node.js:

导出开发代理证书并设置 NODE_EXTRA_CA_CERTS 环境变量:

NODE_EXTRA_CA_CERTS=/path/to/devproxy-cert.pem node app.js

是否使用不同的运行时或框架?

不同的平台以不同的方式处理证书:

平台 解决方案
Python 使用 REQUESTS_CA_BUNDLESSL_CERT_FILE 环境变量
Java 使用 keytool 将证书导入 Java 密钥库
.NET 证书通常通过系统信任库来建立信任
Docker 在容器中装载证书并更新 CA 证书

其他常见问题

所有请求都失败,网关超时

原因:

开发代理无法访问目标 API。

Solution:

请参阅 为什么所有请求都失败并出现网关超时?

使用开发代理后没有 Internet 连接

原因:

开发代理无法正确取消注册为系统代理。

Solution:

请参阅 为什么我的 Internet 连接在使用代理后不起作用?

意外获取 429 个响应

原因:

启用和配置速率限制插件。

Solution:

请参阅 为什么继续收到 429 个响应?

数据库错误

错误 解决方案
SqliteConnection 初始化错误 修复 SQLite 配置
数据库磁盘映像已损坏 重新生成数据库

获取更多帮助

如果找不到解决方案:

  1. 启用调试日志记录:运行devproxy --log-level debug以获取详细输出
  2. 搜索现有问题开发代理 GitHub 问题
  3. 寻求帮助获取帮助和支持

另请参阅