使用本指南诊断和修复常见的开发代理问题。 从症状开始,通过诊断问题查找解决方案。
症状:开发代理未能拦截请求
你已启动开发代理,但应用的请求不会显示在开发代理输出中。 请通过这些问题来确定原因。
开发代理是否正在运行?
检查开发代理(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
如果未看到此输出:
- 通过运行
devproxy --version来检查 Dev Proxy 是否已正确安装 - 如果收到错误, 请重新安装开发代理
开发代理是否注册为系统代理?
必须将开发代理注册为系统代理才能自动截获请求。 如果不是,你的应用的请求将完全绕过开发代理。
如何在 macOS 上检查:
- 打开 系统设置>网络
- 选择活动网络连接
- 转到 详细信息...>代理
- 查找 安全 HTTP 代理(HTTPS),设置为
127.0.0.1:8000
如何在 Windows 上检查:
- 打开 设置>网络和 Internet>代理
- 在 “手动代理设置”下,检查代理服务器是否已设置为
127.0.0.1:8000
如果未将开发代理注册为系统代理:
检查开发代理配置。 运行 devproxy config 以打开配置文件并验证它不包含:
{
"asSystemProxy": false
}
如果此设置存在且设置为 false,请将其删除或设置为 true,然后重启开发代理。
是否正在观看正确的 URL?
开发代理仅会拦截与urlsToWatch配置中所定义模式相匹配的URL请求。
检查方法:
- 查看开发人员代理启动输出以获取要监视的 URL 列表
- 将其与应用正在调用的 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 发出请求,并检查开发代理是否记录它。
是否使用正确的配置文件?
开发代理可能使用的是与预期不同的配置文件。
开发代理如何查找配置文件:
- 如果指定
--config-file,则开发代理使用该文件 - 否则,开发代理在当前目录中查找
devproxyrc.json - 如果未找到,开发代理将使用默认设置
若要验证正在使用哪个配置文件,请执行以下作:
在调试日志模式下运行 Dev Proxy:
devproxy --log-level debug
查找显示加载配置文件的输出。
若要显式指定配置文件,请执行以下作:
devproxy --config-file ./my-config.json
是否将开发代理与 Node.js 应用程序配合使用?
Node.js 不会自动使用系统代理设置。 需要将 Node.js 应用配置为显式使用代理。
Solution:
使用 global-agent 包或配置 HTTP 库以使用代理。 有关详细说明,请参阅 将开发代理与 Node.js 应用程序 配合使用。
使用全局代理快速修复:
安装 global-agent:
npm install global-agent添加到应用的入口点:
import { bootstrap } from 'global-agent'; bootstrap();使用代理环境变量启动应用:
NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node app.js
是否在 Windows 上将开发代理与 PowerShell 配合使用?
PowerShell 不会自动将系统代理设置用于发出的使用 Invoke-WebRequest 或 Invoke-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 配合使用 |
症状:请求被截获,但传递时未更改
开发代理会在输出中显示您的请求,但它们没有被修改、仿真或返回模拟错误。
插件是否已启用?
检查您要使用的插件在您的配置中已启用。
检查方法:
打开配置文件并验证:
- 插件列在
plugins数组中 - 插件具有
"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 上检查:
- 打开 密钥链访问
- 搜索“开发代理”
- 双击证书
- 展开 信任
- 验证 安全套接字层 (SSL) 是否设置为 Always Trust
如何在 Windows 上检查:
- 运行
certmgr.msc - 导航到 受信任的根证书颁发机构>证书
- 查找开发代理证书
如果证书不受信任:
删除并重新安装证书:
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_BUNDLE 或 SSL_CERT_FILE 环境变量 |
| Java | 使用 keytool 将证书导入 Java 密钥库 |
| .NET | 证书通常通过系统信任库来建立信任 |
| Docker | 在容器中装载证书并更新 CA 证书 |
其他常见问题
所有请求都失败,网关超时
原因:
开发代理无法访问目标 API。
Solution:
使用开发代理后没有 Internet 连接
原因:
开发代理无法正确取消注册为系统代理。
Solution:
请参阅 为什么我的 Internet 连接在使用代理后不起作用?
意外获取 429 个响应
原因:
启用和配置速率限制插件。
Solution:
请参阅 为什么继续收到 429 个响应?
数据库错误
| 错误 | 解决方案 |
|---|---|
| SqliteConnection 初始化错误 | 修复 SQLite 配置 |
| 数据库磁盘映像已损坏 | 重新生成数据库 |
获取更多帮助
如果找不到解决方案:
-
启用调试日志记录:运行
devproxy --log-level debug以获取详细输出 - 搜索现有问题: 开发代理 GitHub 问题
- 寻求帮助: 获取帮助和支持