Переопределение конечной точки в Windows и Linux

Маршрутизация фиксированной конечной точки HTTPS авторизованного локального клиента через mitmproxy с захватом области действия, доверием TLS, потоковой передачей и откатом.

Используйте встроенный клиентский Базовый URL/Пользовательская конечная точка/BYOK установка по возможности. Видеть Руководства по подключению и GitHub второй пилот. Локальный перехват HTTPS — это необязательный запасной вариант для клиента, который не может изменить свою конечную точку, а не требование для использования Model Gate.

Это не универсально совместимо. Клиент должен отправить протокол, путь и модель, поддерживаемые вашей учетной записью Model Gate, принять ваш локальный центр сертификации и разрешить вам настроить ключ API Model Gate. Закрепление сертификата, частное хранилище доверенных сертификатов, подписанные запросы, жестко запрограммированная модель или узел удаленного расширения могут помешать работе этого метода. Перезапись URL-адреса не преобразует завершения чата OpenAI в антропные сообщения или ответы, не добавляет возможности модели и не заменяет аутентификацию GitHub.

Перехватывайте только те приложения и трафик, которыми вы владеете или которые уполномочены проверять. Получите одобрение на управляемых рабочих станциях. mitmproxy видит расшифрованные запросы, исходный код и заголовки аутентификации; его закрытый ключ локального центра сертификации может выдавать себя за HTTPS-серверы для клиентов, которые ему доверяют. Не передавайте закрытые ключи CA, не экспортируйте неотредактированные потоки/файлы HAR, не открывайте его пользовательский интерфейс в сети и не отключайте проверку TLS.

Что меняет этот пример

В примере именно этот исходный источник сопоставляется с источником Model API, показанным в документации этого сайта:

https://api.deepseek.com/v1/chat/completions
  -> local mitmproxy
  -> https://api.model-gate.com/v1/chat/completions

Настройте специальный ключ API Model Gate, а не ключ DeepSeek, в поле учетных данных клиента. Выберите включенную модель Model Gate или псевдоним, управляемый администратором, из каталог моделей. Используйте источник API модели, показанный в этом руководстве, с соответствующим ключом API; не используйте панель или хост Partner API.

Правило не преднамеренно редактирует метод HTTP, путь, запрос, тело JSON, model, Authorizationили JSON stream ценить. Он меняет пункт назначения и HTTP-хост / 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. Не устанавливайте внутри WSL для этого примера процесса Windows.

Создайте и доверьте локальный центр сертификации этой установки.

Запустите один раз под той же учетной записью Windows, которая будет запускать прокси:

mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1

После запуска остановите его с помощью Ctrl+С. mitmproxy создает свой центр сертификации в %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.' }

Доверяйте только центру сертификации, созданному вашей собственной установкой. mitmproxy-ca-cert.cer является государственным сертификатом; mitmproxy-ca.pem также содержит закрытый ключ и должен оставаться закрытым. Перезапустите Visual Studio после изменения доверия.

Только в том случае, если утвержденное приложение специально требует Локальная машина доверие, используйте PowerShell с повышенными правами и certutil -addstore Root "$ca" без -user. Это обеспечивает доверие ко всему компьютеру ЦС, представляет собой более широкое изменение безопасности и требует соответствующего удаления хранилища компьютеров, описанного ниже. Возвышение под другой учетная запись администратора может использовать другой профиль и центр сертификации; сохраняйте согласованность конфигурации учетной записи, сертификата и прокси-сервера.

Захватите только намеченный процесс и хост

Запустите встроенный PowerShell от имени администратора, если этого требуют разрешения Windows на захват, используя ту же учетную запись/профиль. Сначала запустите 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 — это нет Код ВС. Расширение может отправлять запросы через отдельный 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. Local Capture использует eBPF; официальная поддержка — Linux 6,8. Ему нужен привилегированный помощник, запущенный через sudo. Бегать mitmweb как обычный пользователь с --mode local:... в командной строке, чтобы он мог запросить эту привилегию; избегайте переключения всего прокси на root и случайного использования /root/.mitmproxy.

Сначала инициализируйте ЦС под своей обычной учетной записью, затем остановитесь на Ctrl+С:

mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1

Отдавайте предпочтение документированному механизму пользовательского центра сертификации приложения. На Убунту/Дебиан, приложения, использующие системное хранилище доверенных сертификатов, могут вместо этого использовать эту необязательную общесистемную установку:

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/Node/браузера или ограниченному приложению может потребоваться собственная документированная настройка доверия; импорт в хранилище ОС не гарантирует, что каждый клиент ему доверяет. Другие дистрибутивы используют свои собственные процедуры CA-store.

Для локального процесса 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 убедитесь, что местом назначения является предполагаемый хост API Model Gate, путь поддерживается, существует идентификатор/псевдоним модели и статус HTTP успешен. Проверьте историю запросов шлюза модели и убедитесь, что потоковый текст поступает постепенно. Не публикуйте заголовок авторизации или экспорт потока в качестве доказательства.

Нет перехваченного запроса. Фактический помощник/PID, привилегии захвата, локальное или удаленное выполнение, имя исходного хоста и поддержка ядра.

Ошибка сертификата TLS. Исправьте CA/профиль/хранилище и перезапустите клиент. Закрепление сертификата — это ограничение совместимости, а не причина для отключения проверки.

401. Клиент должен использовать ключ Model Gate для соответствующего аккаунта/домена API; map_remote не обменивается учетными данными.

404. Проверьте фактический путь; сопоставление только с источником не добавляет /v1.

400 или messages.0 / system ошибка. Проверьте совместимость протокола запроса. Перезапись источника не переводит роли сообщений или другие поля JSON.

Модель недоступна. Используйте включенный канонический идентификатор или существующий псевдоним; маппинг не переименовывает model.

Стриминг приходит сразу. Убедитесь, что дополнение только для ответа загружено успешно, клиент stream ценность и фактическая поддержка поставщика. Не включайте глобальную потоковую передачу запросов.

Остановить и лишить доверия

Прежде чем остановить перехват, закройте клиент или удалите ключ Model Gate из конфигурации исходного поставщика. В противном случае его следующий прямой запрос может отправить этот ключ исходному поставщику. Не думайте, что остановка прокси-сервера не удалась. Остановите mitmweb с помощью Ctrl+C, затем восстановите обычные настройки конечной точки/ключа клиента.

Для 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.' }

Для дополнительного Локальная машина импортируйте, используйте оболочку с повышенными правами и 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

Также удалите любую конфигурацию ЦС, специфичную для приложения. Перезапустите клиенты. Удалите конфиденциальные захваченные артефакты и поменяйте выделенный ключ Model Gate, если он был раскрыт или отправлен в непредусмотренное место назначения. Эти действия на рабочей станции не требуют изменения nginx, хранилищ доверенных сертификатов сервера, производственных .env файлы или политику TLS Model Gate.

Официальные ссылки

Проверено 8 сентября 2026 г. Подтвердите параметры в соответствии с установленными mitmweb --options; Захват клиента и доверительное поведение по-прежнему требуют тестирования на вашей рабочей станции.