Контролируемое локальное перенаправление эндпоинта
Добровольно включаемый запасной вариант для рабочих станций, где клиент не позволяет настроить адрес API.
Сначала используйте собственную настройку эндпоинта. Этот вариант предназначен для рабочей станции и приложения, которыми вы вправе управлять, когда клиент не позволяет изменить совместимый HTTPS-адрес API. Требуются локальный перехватывающий прокси и явное доверие его собственному центру сертификации. Приложения с закреплёнными сертификатами или отдельными хранилищами доверия могут не работать.
Пример перенаправляет https://api.deepseek.com/ на https://api.b2b-llm.com/. Метод, путь, query и поля JSON намеренно сохраняются. Назначение, TLS-соединение и Host/HTTP2 authority меняются; это не побайтово неизменная передача и не преобразователь протоколов API.
Вспомогательный скрипт потоковых ответов
Создайте b2b-response-stream.py рядом с командами ниже:
from mitmproxy import ctx, exceptions
def configure(updated):
if ctx.options.stream_large_bodies is not None:
raise exceptions.OptionsError('Keep request buffering enabled for URL mapping.')
def requestheaders(flow):
flow.request.stream = False
def responseheaders(flow):
if flow.response is not None:
flow.response.stream = True
Запросы должны оставаться буферизованными до применения перенаправления map_remote. Скрипт включает потоковую передачу только для ответов. Не задавайте глобальный порог stream_large_bodies=1 для этого рецепта.
Подготовка Windows
Установите официальный нативный дистрибутив Windows с сайта mitmproxy. Один раз запустите и остановите его под той же учётной записью, с которой будет выполняться перехват:
mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1
После Ctrl+C импортируйте только публичный сертификат CA вашей установки в доверие Current User:
$ca = Join-Path $env:USERPROFILE '.mitmproxy\mitmproxy-ca-cert.cer'
if (-not (Test-Path -LiteralPath $ca)) { throw 'Initialize the proxy under this account first.' }
certutil -user -addstore Root "$ca"
if ($LASTEXITCODE -ne 0) { throw 'Certificate import failed.' }
Общесистемное доверие требует разрешения администратора и последующего удаления из соответствующего системного хранилища. Не распространяйте закрытый файл mitmproxy-ca.pem. После добавления доверия перезапустите приложение.
Для процесса Visual Studio используйте повышенные права PowerShell, если они нужны для перехвата, сохраняя ту же учётную запись и профиль CA:
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 .\b2b-response-stream.py `
--set 'map_remote=|^https://api\.deepseek\.com(?::443)?/|https://api.b2b-llm.com/'
devenv — Visual Studio, не VS Code. Расширение может использовать вспомогательный процесс: определите его через Get-Process и при необходимости укажите фактический PID как local:12345. Не расширяйте перехват на всю машину только потому, что первое имя процесса не дало трафика.
Подготовка Linux
Local Capture требует поддерживаемого ядра; для этого рецепта документирован минимум Linux 6.8. Запускайте mitmweb как обычный пользователь, чтобы привилегированный помощник запросил sudo при необходимости. WSL не является поддерживаемой заменой нативного перехвата процессов. Удалённые процессы разработки нужно настраивать там, где они действительно выполняются.
После создания CA предпочитайте документированный механизм пользовательских центров сертификации приложения. Для приложений Debian/Ubuntu, использующих системное хранилище, разрешённый общесистемный импорт выглядит так:
sudo install -m 0644 "$HOME/.mitmproxy/mitmproxy-ca-cert.pem" \
/usr/local/share/ca-certificates/b2b-local-proxy.crt
sudo update-ca-certificates
Запустите ограниченное перенаправление для процесса, который фактически создаёт запросы:
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 ./b2b-response-stream.py \
--set 'map_remote=|^https://api\.deepseek\.com(?::443)?/|https://api.b2b-llm.com/'
Проверка без раскрытия ключа
Начните с фиктивного токена и промпта без конфиденциальных данных. Убедитесь, что перенаправленное назначение — нужный корпоративный API, затем задайте в клиенте отдельный ограниченный ключ B2B LLM. Перенаправление не обменивает ключ DeepSeek на ключ компании. Исходные пути сохраняются, поэтому отсутствующий префикс /v1 по-прежнему требует отдельного правила пути для клиента. Сопоставление исходного хоста должно быть точным и привязанным к границам.
Доверие CA разрешает расшифровку HTTPS в пределах перехвата. Оставляйте интерфейсы прокси доступными только через loopback, избегайте экспорта потоков и не отключайте проверку TLS поставщика. Закрепление сертификатов, подписанные запросы и несовместимые тела API остаются ограничениями совместимости.
Отключение в безопасном порядке
Закройте клиент или удалите ключ компании из поля исходного поставщика до остановки перехвата. Иначе следующий прямой запрос может раскрыть этот ключ исходному поставщику. Остановите mitmweb и восстановите обычную настройку эндпоинта.
Для импорта Windows Current User найдите и удалите только этот CA:
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($ca)
certutil -user -delstore Root $cert.Thumbprint
Для системного импорта Debian/Ubuntu:
sudo rm /usr/local/share/ca-certificates/b2b-local-proxy.crt
sudo update-ca-certificates
При ошибке команды очистки проверьте соответствующее хранилище доверия. Не удаляйте посторонние корневые сертификаты по широкому совпадению имени.