Windows 和 Linux 上的端点覆盖
通过 mitmproxy 路由授权本地客户端的固定 HTTPS 端点,并具有范围捕获、TLS 信任、流式传输和回滚功能。
使用客户端的内置 基本 URL / 自定义端点 / BYOK 尽可能设置。看 连接指南 和 GitHub 副驾驶。本地 HTTPS 拦截是无法更改其端点的客户端的可选后备方案,而不是使用 Model Gate 的要求。
这并不普遍兼容。 客户端必须发送您的 Model Gate 帐户支持的协议、路径和模型,接受您的本地证书颁发机构,并允许您配置 Model Gate API 密钥。证书固定、私有信任存储、签名请求、硬编码模型或远程扩展主机可能会阻止此方法起作用。 URL 重写不会将 OpenAI 聊天完成转换为人为消息或响应、添加模型功能或替换 GitHub 身份验证。
仅拦截您拥有或有权检查的应用程序和流量。获得托管工作站的批准。 mitmproxy 可以看到解密的提示、源代码和身份验证标头;其本地 CA 私钥可以向信任它的客户端模拟 HTTPS 服务器。请勿共享 CA 私钥、导出未编辑的流/HAR 文件、向网络公开其 UI 或禁用 TLS 验证。
这个例子改变了什么
该示例将此源源精确映射到本站点文档中显示的模型 API 源:
https://api.deepseek.com/v1/chat/completions
-> local mitmproxy
-> https://api.model-gate.com/v1/chat/completions
配置一个 专用 Model Gate API 密钥,而不是客户端凭证字段中的 DeepSeek 密钥。从以下位置选择已启用的 Model Gate 模型或管理员管理的别名 型号目录。使用本指南中显示的模型 API 来源及其匹配的 API 密钥;请勿使用面板或合作伙伴 API 主机。
该规则不会有意编辑 HTTP 方法、路径、查询、JSON 正文、 model, Authorization,或 JSON stream 价值。 它确实更改了目的地和 HTTP Host / HTTP/2 :authority;上游 TLS 连接到新目的地。 HTTP 版本、标头大小写/顺序、连接标头和帧也可能不同。它不是逐字节保存所有标头或网络流量。
准备仅响应流(两个系统)
将以下内容另存为 model-gate-response-stream.py 在你的工作目录中。相同的文件包含在 PHP 应用程序内的发行版中,网址为 deploy/client-tools/;它在 mitmproxy 内部运行,使用本机包时不需要单独安装 Python。
"""Keep map_remote requests buffered; stream responses without retaining bodies."""
from mitmproxy import ctx, exceptions, http
def configure(updated: set[str]) -> None:
if ctx.options.stream_large_bodies is not None:
raise exceptions.OptionsError(
"Unset stream_large_bodies: map_remote must run before request forwarding."
)
def requestheaders(flow: http.HTTPFlow) -> None:
flow.request.stream = False
def responseheaders(flow: http.HTTPFlow) -> None:
if flow.response is not None:
flow.response.stream = True
内置的 map_remote 插件重写了目的地 要求 读取请求正文后挂钩。保持请求流禁用,直到重写发生。 请勿使用 --set stream_large_bodies=1 用这个食谱: 它可以在重写之前转发原始请求。上面的小插件仅支持响应流,包括 SSE,而不修改 JSON 正文或重放请求。
下面的命令使用 --set stream_large_bodies 没有等号或值 将此可选设置重置为 None,并明确禁用流式主体保留。该插件稍后拒绝启用全局流阈值。从此专用会话中删除其他请求流/重写插件,并在将密钥放入客户端之前解决所有启动错误。代理不是故障关闭的凭证边界:首先使用虚拟密钥验证路由。
Windows:Visual Studio 示例
从以下位置安装官方本机 Windows 软件包 mitmproxy 下载。重新打开 PowerShell 并检查 mitmweb --version。对于此 Windows 进程示例,请勿安装在 WSL 内。
创建并信任此安装的本地 CA
在将运行代理的同一 Windows 帐户下启动一次:
mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1
启动后,停止它 Ctrl+C。 mitmproxy 在中创建其 CA %USERPROFILE%\.mitmproxy。更喜欢 当前用户 对您运行的应用程序的信任:
$ca = Join-Path $env:USERPROFILE '.mitmproxy\mitmproxy-ca-cert.cer'
if (-not (Test-Path -LiteralPath $ca)) { throw 'Start mitmweb once under this account first.' }
certutil -user -addstore Root "$ca"
if ($LASTEXITCODE -ne 0) { throw 'CA installation failed.' }
仅信任您自己安装生成的 CA。 mitmproxy-ca-cert.cer 是公共证书; mitmproxy-ca.pem 还包含私钥并且必须保持私密。更改信任后重新启动 Visual Studio。
仅当批准的申请特别需要时 本地机器 信任,使用提升的 PowerShell 和 certutil -addstore Root "$ca" 没有 -user。这在机器范围内信任 CA,是更广泛的安全更改,并且需要下面匹配的机器存储删除。下标高 不同的 管理员帐户可以使用不同的配置文件和 CA;保持帐户、证书和代理配置一致。
仅捕获预期的进程和主机
当 Windows 捕获权限需要时,使用相同的帐户/配置文件以管理员身份运行本机 PowerShell。首先启动 Visual Studio。此示例针对进程名称 devenv:
mitmweb --mode local:devenv `
--listen-host 127.0.0.1 --web-host 127.0.0.1 `
--allow-hosts '^api\.deepseek\.com(:443)?$' `
--set connection_strategy=lazy --set upstream_cert=false `
--set stream_large_bodies --set store_streamed_bodies=false `
-s .\model-gate-response-stream.py `
--set 'map_remote=|^https://api\.deepseek\.com(?::443)?/|https://api.model-gate.com/'
PowerShell 的续行反引号后面不能有空格。锚定规则仅匹配指定的 HTTPS 源,包括显式端口 443;查询中出现的提供程序主机名或另一个主机名不会被重写。主机允许列表避免解密来自所选进程的不相关目标。 lazy 加 upstream_cert=false 避免与原始提供商不必要的证书嗅探连接。实际上游的 TLS 验证仍然启用。
Visual Studio 是 不是 VS 代码。扩展程序可以通过单独的 ServiceHub、语言服务器或帮助程序进程发送请求,而不是通过 devenv。在扩大捕获范围之前确定实际的网络拥有流程。要检查 Visual Studio 实例:
Get-Process -Name devenv | Select-Object Id, ProcessName, Path
代替 local:devenv 和 local:12345 使用实际的 PID,或明确标识的 PID 的逗号分隔列表。重新启动后 PID 会发生变化。请勿使用 $PID 对于自定义 PowerShell 变量;它指的是PowerShell自己的进程。请勿切换至整机 --mode local 只是为了让缺失的请求出现。
Linux:相同范围的映射
安装当前的官方 mitmproxy 版本并检查 mitmweb --version 和 uname -r。本地捕获使用eBPF;官方支持平台是Linux 6.8。它需要一个特权帮助者开始 sudo。跑步 mitmweb 作为您的普通用户 --mode local:... 在命令行上,以便它可以请求该权限;避免将整个代理切换到 root 并意外使用 /root/.mitmproxy。
首先在你的普通账户下初始化CA,然后停止 Ctrl+C:
mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1
更喜欢应用程序记录的自定义 CA 机制。在 Ubuntu/Debian,使用系统信任存储的应用程序可以使用此可选的系统范围安装:
sudo install -m 0644 "$HOME/.mitmproxy/mitmproxy-ca-cert.pem" \
/usr/local/share/ca-certificates/model-gate-local-mitmproxy.crt
sudo update-ca-certificates
重新启动客户端。私有 Java/节点/浏览器信任存储或受限应用程序可能需要自己记录的信任设置;导入操作系统存储并不能保证每个客户端都信任它。其他发行版使用自己的 CA 存储过程。
对于名为的本地 VS Code 进程 code,映射为:
mitmweb --mode local:code \
--listen-host 127.0.0.1 --web-host 127.0.0.1 \
--allow-hosts '^api\.deepseek\.com(:443)?$' \
--set connection_strategy=lazy --set upstream_cert=false \
--set stream_large_bodies --set store_streamed_bodies=false \
-s ./model-gate-response-stream.py \
--set 'map_remote=|^https://api\.deepseek\.com(?::443)?/|https://api.model-gate.com/'
与在 Windows 上一样,使用实际的请求生成进程/PID,而不一定是编辑器窗口。检查 ps -eo pid,comm,args 并替代 local:12345 根据需要。 Linux 名称匹配仅限于前 16 个字符。 WSL 上不支持本地捕获,并且容器需要主机网络才能实现此模式。来自 SSH/远程扩展主机的流量必须在运行该进程的计算机上配置,而不仅仅是在桌面上配置。
流媒体、路径和其他提供商
仅响应插件转发 HTTP 响应而无需等待完整响应,这对于 SSE 令牌传递很重要。请求主体保持缓冲状态,直到 map_remote 已更改目的地。默认不保留流体进行检查;标题和状态仍然有用。不要仅仅为了排除某个键的故障而启用主体保留或流量导出。此设置不会更改客户端的 JSON stream 标记并且无法创建非流提供程序流。
默认映射保留路径。一位客户发送 /chat/completions 没有 /v1 仍会将该路径发送到 Model Gate,并可能收到 404。 仅适用于已知其路径需要此规范化的源 API,替换 map_remote 价值:
map_remote=|^https://api\.deepseek\.com(?::443)?/(?:v1/)?|https://api.model-gate.com/v1/
这里特意加了一个 /v1/ 前缀,保留现有的,剩余的路径和查询。它是一个单独的路径改变变体,而不是仅起源的示例。在发送真正的提示之前验证生成的端点。
对于不同的提供商,请替换中的确切源主机名 两个都 allow-hosts 和 map_remote,转义正则表达式点,并选择正确的目标原点/路径。保持比赛稳定 ^https:// 和主机名边界;切勿使用广泛的子字符串替换。现有保存的插件或重写规则可能会改变结果,因此在测试之前检查您的 mitmproxy 配置。
验收及故障排除
首先使用虚拟凭证和不敏感的提示来测试路由;预期目标的身份验证失败。只有在目的地确定后,才用专用的有限钥匙提出一个刻意的小请求;推理可以计费。在 mitmweb 中,检查目标是否是预期的 Model Gate API 主机、路径是否受支持、模型 ID/别名是否存在以及 HTTP 状态是否成功。检查模型门请求历史记录并确认流文本逐渐到达。请勿发布授权标头或流导出作为证据。
没有捕获的请求。 实际的帮助程序/PID、捕获权限、本地与远程执行、源主机名和内核支持。
TLS 证书失败。 正确的 CA/配置文件/存储和客户端重新启动。证书固定是兼容性限制,而不是禁用验证的原因。
401. 客户端必须使用匹配帐户/API 域的 Model Gate 密钥; map_remote 不交换凭据。
404. 检查实际路径;仅原点映射不添加 /v1。
400 或 messages.0 / system 错误。 检查请求协议兼容性。源重写不会转换消息角色或其他 JSON 字段。
型号不可用。 使用已启用的规范 ID 或现有别名;映射不重命名 model。
流媒体同时到达。 检查仅响应插件是否已成功加载,客户端的 stream 价值和实际的提供商支持。不启用全局请求流。
停止并消除信任
在停止拦截之前,请关闭客户端或从其原始提供商配置中删除 Model Gate 密钥。 否则,其下一个直接请求可以将该密钥发送给原始提供者。不要假设停止代理失败关闭。使用 Ctrl+C 停止 mitmweb,然后恢复客户端的正常端点/密钥设置。
对于 Windows 当前用户 上面导入,仅删除此安装的确切证书:
$ca = Join-Path $env:USERPROFILE '.mitmproxy\mitmproxy-ca-cert.cer'
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($ca)
certutil -user -delstore Root $cert.Thumbprint
if ($LASTEXITCODE -ne 0) { throw 'CA removal failed; inspect the certificate store.' }
对于可选的 本地机器 导入,使用提升的 shell 并 certutil -delstore Root $cert.Thumbprint 反而。保留公共 CA 文件,直到您识别并删除匹配的受信任证书;不要按名称删除不相关的受信任根。
对于上面的 Ubuntu/Debian 系统范围导入:
sudo rm -- /usr/local/share/ca-certificates/model-gate-local-mitmproxy.crt
sudo update-ca-certificates --fresh
也删除任何特定于应用程序的 CA 配置。重新启动客户端。删除敏感的捕获工件,并旋转专用的模型门密钥(如果它被暴露或发送到意外的目的地)。这些工作站步骤不需要更改 nginx、服务器信任存储、生产 .env 文件或 Model Gate 的 TLS 策略。
官方参考资料
点评日期:2026 年 9 月 8 日。确认您已安装的选项 mitmweb --options;客户端捕获和信任行为仍然需要在您的工作站上进行测试。