Zastąpienie punktu końcowego w systemach Windows i Linux

Kieruj stały punkt końcowy HTTPS autoryzowanego klienta lokalnego przez mitmproxy, z przechwytywaniem zakresu, zaufaniem TLS, przesyłaniem strumieniowym i wycofywaniem.

Użyj wbudowanego klienta Podstawowy adres URL / niestandardowy punkt końcowy / BYOK ustawienie, jeśli to możliwe. Widzieć Przewodniki połączeń I Drugi pilot GitHuba. Lokalne przechwytywanie HTTPS jest opcjonalnym rozwiązaniem awaryjnym dla klienta, który nie może zmienić swojego punktu końcowego, a nie wymogiem korzystania z Model Gate.

Nie jest to powszechnie kompatybilne. Klient musi wysłać protokół, ścieżkę i model obsługiwany przez Twoje konto Model Gate, zaakceptować lokalny urząd certyfikacji i umożliwić skonfigurowanie klucza API Model Gate. Przypinanie certyfikatów, prywatny magazyn zaufania, podpisane żądania, model zakodowany na stałe lub zdalny host rozszerzenia mogą uniemożliwić działanie tej metody. Przepisanie adresu URL nie konwertuje uzupełnień czatu OpenAI na wiadomości lub odpowiedzi antropiczne, nie dodaje możliwości modelu ani nie zastępuje uwierzytelniania GitHub.

Przechwytuj tylko aplikacje i ruch, którego jesteś właścicielem lub do którego kontroli masz uprawnienia. Uzyskaj zgodę na zarządzanych stacjach roboczych. mitmproxy widzi odszyfrowane podpowiedzi, kod źródłowy i nagłówki uwierzytelniające; jego klucz prywatny lokalnego urzędu certyfikacji może podszywać się pod serwery HTTPS klientom, którzy mu ufają. Nie udostępniaj kluczy prywatnych urzędu certyfikacji, nie eksportuj niezredagowanych plików przepływów/HAR, nie ujawniaj jego interfejsu użytkownika w sieci ani nie wyłączaj weryfikacji TLS.

Co ten przykład zmienia

Przykład odwzorowuje dokładnie to źródło źródła na początek Model API pokazany w dokumentacji tej witryny:

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

Skonfiguruj dedykowany klucz API Model Gate, a nie klucz DeepSeek, w polu danych uwierzytelniających klienta. Wybierz włączony model Model Gate lub alias zarządzany przez administratora z katalog modeli. Użyj źródła Model API pokazanego w tym przewodniku z pasującym kluczem API; nie używaj panelu ani hosta Partner API.

Reguła nie edytuje celowo metody HTTP, ścieżki, zapytania, treści JSON, model, Authorizationlub JSON stream wartość. Zmienia miejsce docelowe i host HTTP / HTTP/2 :authority; upstream TLS łączy się z nowym miejscem docelowym. Wersja HTTP, wielkość/kolejność nagłówka, nagłówki połączeń i ramki również mogą się różnić. Nie jest to zachowanie bajt po bajcie wszystkich nagłówków lub ruchu sieciowego.

Przygotuj transmisję strumieniową typu „tylko odpowiedź” (oba systemy)

Zapisz poniższe jako model-gate-response-stream.py w swoim katalogu roboczym. Ten sam plik jest zawarty w wydaniu aplikacji PHP pod adresem deploy/client-tools/; działa wewnątrz mitmproxy i nie wymaga osobnej instalacji Pythona podczas korzystania z pakietu natywnego.

"""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

Wbudowany map_remote dodatek przepisuje miejsce docelowe w pliku wniosek hook, po odczytaniu treści żądania. Wyłącz przesyłanie strumieniowe żądań do czasu, aż nastąpi ponowne zapisanie. Nie używać --set stream_large_bodies=1 z tym przepisem: może przesłać oryginalne żądanie przed przepisaniem. Powyższy mały dodatek umożliwia jedynie przesyłanie strumieniowe odpowiedzi, w tym SSE, bez modyfikowania treści JSON i ponownego odtwarzania żądań.

Poniższe polecenia używają --set stream_large_bodies bez znaku równości lub wartości aby zresetować to opcjonalne ustawienie Nonei wyraźnie wyłącz przechowywanie treści przesyłanej strumieniowo. Dodatek odrzuca późniejsze włączenie globalnego progu przesyłania strumieniowego. Usuń inne dodatki do przesyłania strumieniowego/przepisywania żądań z tej dedykowanej sesji i rozwiąż wszelkie błędy uruchamiania przed umieszczeniem klucza w kliencie. Serwer proxy nie jest zamkniętą w przypadku awarii granicą danych uwierzytelniających: najpierw zweryfikuj trasę za pomocą klucza fikcyjnego.

Windows: przykład Visual Studio

Zainstaluj oficjalny natywny pakiet systemu Windows z Pobieranie mitmproxy. Otwórz ponownie PowerShell i sprawdź mitmweb --version. Nie instaluj wewnątrz WSL w tym przykładzie procesu Windows.

Utwórz lokalny urząd certyfikacji tej instalacji i zaufaj mu

Uruchom raz na tym samym koncie Windows, na którym będzie uruchamiany serwer proxy:

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

Po uruchomieniu zatrzymaj go za pomocą Ctrl+C. mitmproxy tworzy swój urząd certyfikacji w %USERPROFILE%\.mitmproxy. Woleć Bieżący użytkownik zaufaj aplikacji działającej podczas:

$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.' }

Ufaj tylko urzędowi certyfikacji wygenerowanemu przez Twoją własną instalację. mitmproxy-ca-cert.cer jest certyfikatem publicznym; mitmproxy-ca.pem zawiera również klucz prywatny i musi pozostać prywatny. Uruchom ponownie program Visual Studio po zmianie zaufania.

Tylko wtedy, gdy zatwierdzona aplikacja specjalnie tego potrzebuje Maszyna lokalna zaufaj, użyj podwyższonego PowerShell i certutil -addstore Root "$ca" bez -user. Powoduje to zaufanie do całego komputera urzędu certyfikacji, stanowi szerszą zmianę zabezpieczeń i wymaga poniższego usunięcia odpowiedniego magazynu maszyn. Wzniesienie pod a różny konto administratora może korzystać z innego profilu i urzędu certyfikacji; utrzymuj spójność konfiguracji konta, certyfikatu i serwera proxy.

Przechwytuj tylko zamierzony proces i hosta

Uruchom natywny program PowerShell jako administrator, jeśli wymagają tego uprawnienia do przechwytywania systemu Windows, używając tego samego konta/profilu. Najpierw uruchom program Visual Studio. Ten przykład dotyczy nazwy procesu 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/'

Po znaczniku kontynuacji wiersza programu PowerShell nie może znajdować się spacja. Zakotwiczona reguła pasuje tylko do określonego źródła HTTPS, w tym jawnego portu 443; nazwa hosta dostawcy występująca w zapytaniu lub inna nazwa hosta nie jest przepisana. Lista dozwolonych hostów pozwala uniknąć odszyfrowywania niepowiązanych miejsc docelowych z wybranego procesu. lazy plus upstream_cert=false pozwala uniknąć niepotrzebnego połączenia z pierwotnym dostawcą w celu wąchania certyfikatu. Weryfikacja TLS rzeczywistego przesyłania danych jest nadal włączona.

Visual Studio jest nie Kod VS. Rozszerzenie może zamiast tego wysyłać żądania za pośrednictwem oddzielnego ServiceHuba, serwera językowego lub procesu pomocniczego devenv. Zidentyfikuj rzeczywisty proces posiadania sieci przed rozszerzeniem przechwytywania. Aby sprawdzić instancje programu Visual Studio:

Get-Process -Name devenv | Select-Object Id, ProcessName, Path

Zastępować local:devenv z local:12345 używając rzeczywistego PID lub rozdzielonej przecinkami listy wyraźnie zidentyfikowanych PID. PID zmieniają się po ponownym uruchomieniu. Nie używać $PID dla niestandardowej zmiennej PowerShell; odnosi się do własnego procesu PowerShell. Nie przełączaj na całą maszynę --mode local jedynie po to, aby wyświetlić brakujące żądanie.

Linux: to samo mapowanie o określonym zakresie

Zainstaluj aktualną oficjalną kompilację mitmproxy i sprawdź mitmweb --version I uname -r. Lokalne przechwytywanie wykorzystuje eBPF; oficjalnym poziomem wsparcia jest Linux 6.8. Potrzebuje uprzywilejowanego pomocnika, który mógłby zacząć sudo. Uruchomić mitmweb jako zwykły użytkownik --mode local:... w wierszu poleceń, aby mógł zażądać tego uprawnienia; unikaj przełączania całego serwera proxy na root i przypadkowego użycia /root/.mitmproxy.

Najpierw zainicjuj urząd certyfikacji w ramach swojego zwykłego konta, a następnie zakończ Ctrl+C:

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

Preferuj udokumentowany mechanizm niestandardowego urzędu certyfikacji aplikacji. NA Ubuntu/Debiana, aplikacje korzystające z systemowego magazynu zaufanych certyfikatów mogą zamiast tego skorzystać z tej opcjonalnej instalacji obejmującej cały system:

sudo install -m 0644 "$HOME/.mitmproxy/mitmproxy-ca-cert.pem" \
  /usr/local/share/ca-certificates/model-gate-local-mitmproxy.crt
sudo update-ca-certificates

Uruchom ponownie klienta. Prywatny magazyn zaufania Java/węzła/przeglądarki lub ograniczona aplikacja może wymagać własnej udokumentowanej konfiguracji zaufania; importowanie do magazynu systemu operacyjnego nie gwarantuje, że każdy klient mu zaufa. Inne dystrybucje korzystają z własnych procedur magazynu CA.

Dla lokalnego procesu VS Code o nazwie code, mapowanie to:

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/'

Podobnie jak w systemie Windows, użyj rzeczywistego procesu/PID generującego żądanie, niekoniecznie okna edytora. Sprawdzać ps -eo pid,comm,args i zastąpić local:12345 według potrzeb. Dopasowanie nazw w systemie Linux jest ograniczone do pierwszych 16 znaków. Lokalne przechwytywanie w sieci WSL nie jest obsługiwane, a w tym trybie kontenery wymagają sieci hostów. Ruch z hosta SSH/rozszerzenia zdalnego musi być skonfigurowany na komputerze, na którym działa ten proces, a nie tylko na komputerze.

Streaming, ścieżki i inni dostawcy

Dodatek tylko do odpowiedzi przekazuje odpowiedzi HTTP bez oczekiwania na pełną odpowiedź, co jest ważne w przypadku dostarczania tokenu SSE. Treści żądań pozostają buforowane do momentu map_remote zmienił miejsce docelowe. Organy przesyłane strumieniowo nie są domyślnie zatrzymywane do kontroli; nagłówki i status pozostają przydatne. Nie włączaj przechowywania treści ani eksportu przepływu jedynie w celu rozwiązania problemu z kluczem. To ustawienie nie zmienia kodu JSON klienta stream flag i nie może utworzyć strumienia dostawcy innego niż przesyłanie strumieniowe.

Domyślne mapowanie zachowuje ścieżki. Klient wysyła /chat/completions bez /v1 nadal wyśle ​​tę ścieżkę do Model Gate i może otrzymać 404. Tylko w przypadku źródłowego interfejsu API, o którym wiadomo, że ścieżki wymagają tej normalizacji, wymień map_remote wartość z:

map_remote=|^https://api\.deepseek\.com(?::443)?/(?:v1/)?|https://api.model-gate.com/v1/

To celowo dodaje jeden /v1/ prefiks, zachowując istniejący, pozostałą ścieżkę i zapytanie. Jest to oddzielny wariant zmieniający ścieżkę, a nie przykład dotyczący samego początku. Sprawdź wynikowy punkt końcowy przed wysłaniem prawdziwego monitu.

W przypadku innego dostawcy zastąp dokładną nazwę hosta źródłowego w Zarówno allow-hosts I map_remote, unikaj kropek wyrażeń regularnych i wybierz prawidłowe źródło/ścieżkę celu. Trzymaj mecz zakotwiczony za pomocą ^https:// i granica nazwy hosta; nigdy nie używaj szerokiego zastąpienia podciągu. Istniejące zapisane dodatki lub reguły przepisywania mogą zmienić wynik, dlatego przed testowaniem sprawdź konfigurację mitmproxy.

Akceptacja i rozwiązywanie problemów

Najpierw przetestuj routing za pomocą fałszywego poświadczenia i niewrażliwego monitu; oczekiwany jest błąd uwierzytelnienia w zamierzonym miejscu docelowym. Dopiero po potwierdzeniu miejsca docelowego złóż jedno celowo małe żądanie za pomocą dedykowanego ograniczonego klucza; wnioskowanie może być płatne. W mitmweb sprawdź, czy miejscem docelowym jest zamierzony host API Model Gate, ścieżka jest obsługiwana, istnieje identyfikator/alias modelu i stan HTTP się powiódł. Sprawdź historię żądań bramy modelu i potwierdź, że przesyłany strumieniowo tekst dociera stopniowo. Nie publikuj nagłówka autoryzacji ani eksportu przepływu jako dowodu.

Brak przechwyconego żądania. Rzeczywisty pomocnik/PID, uprawnienia do przechwytywania, wykonanie lokalne i zdalne, źródłowa nazwa hosta i obsługa jądra.

Awaria certyfikatu TLS. Popraw urząd certyfikacji/profil/sklep i uruchom ponownie klienta. Przypinanie certyfikatu jest ograniczeniem zgodności, a nie powodem do wyłączenia weryfikacji.

401. Klient musi użyć klucza Model Gate dla odpowiedniego konta/domeny API; map_remote nie wymienia poświadczeń.

404. Sprawdź rzeczywistą ścieżkę; mapowanie tylko pochodzenia nie jest dodawane /v1.

400 lub messages.0 / system błąd. Sprawdź zgodność protokołu żądania. Ponowne zapisanie źródła nie tłumaczy ról komunikatów ani innych pól JSON.

Model niedostępny. Użyj włączonego identyfikatora kanonicznego lub istniejącego aliasu; mapowanie nie zmienia nazwy model.

Streaming pojawia się jednocześnie. Sprawdź, czy dodatek tylko do odpowiedzi został pomyślnie załadowany, plik klienta stream wartość i faktyczne wsparcie dostawcy. Nie włączaj globalnego przesyłania strumieniowego żądań.

Zatrzymaj się i usuń zaufanie

Przed zatrzymaniem przechwytywania zamknij klienta lub usuń klucz Model Gate z konfiguracji pierwotnego dostawcy. W przeciwnym razie następne bezpośrednie żądanie może wysłać ten klucz do pierwotnego dostawcy. Nie zakładaj, że zatrzymanie serwera proxy zakończy się niepowodzeniem. Zatrzymaj mitmweb za pomocą Ctrl+C, a następnie przywróć normalne ustawienia punktu końcowego/klucza klienta.

Dla Windowsa Bieżący użytkownik import powyżej, usuń tylko dokładny certyfikat tej instalacji:

$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.' }

Dla opcji Maszyna lokalna importuj, użyj podwyższonej powłoki i certutil -delstore Root $cert.Thumbprint Zamiast. Przechowuj publiczny plik urzędu certyfikacji do czasu zidentyfikowania i usunięcia pasującego zaufanego certyfikatu; nie usuwaj niepowiązanych zaufanych katalogów głównych według nazwy.

W przypadku powyższego importu całego systemu Ubuntu/Debian:

sudo rm -- /usr/local/share/ca-certificates/model-gate-local-mitmproxy.crt
sudo update-ca-certificates --fresh

Usuń także całą konfigurację urzędu certyfikacji specyficzną dla aplikacji. Uruchom ponownie klientów. Usuń wrażliwe przechwycone artefakty i obróć dedykowany klucz Bramy Modelu, jeśli został ujawniony lub wysłany w niezamierzone miejsce docelowe. Te kroki dotyczące stacji roboczej nie wymagają zmiany nginx, magazynów zaufanych serwerów ani produkcji .env plików lub zasad TLS firmy Model Gate.

Oficjalne referencje

Oceniono 2026-09-08. Potwierdź opcje względem zainstalowanego mitmweb --options; przechwytywanie klientów i zachowanie zaufania nadal wymagają testowania na stacji roboczej.