Endpunktüberschreibung unter Windows und Linux
Leiten Sie den festen HTTPS-Endpunkt eines autorisierten lokalen Clients über Mitmproxy weiter, mit bereichsbezogener Erfassung, TLS-Vertrauen, Streaming und Rollback.
Verwenden Sie die integrierte Funktion eines Clients Basis-URL / Benutzerdefinierter Endpunkt / BYOK Einstellung wann immer möglich. Sehen Verbindungsanleitungen Und GitHub-Copilot. Das lokale Abfangen von HTTPS ist ein optionaler Fallback für einen Client, der seinen Endpunkt nicht ändern kann, und keine Voraussetzung für die Verwendung von Model Gate.
Dies ist nicht universell kompatibel. Der Client muss ein Protokoll, einen Pfad und ein Modell senden, die von Ihrem Model Gate-Konto unterstützt werden, Ihre lokale Zertifizierungsstelle akzeptieren und Ihnen die Konfiguration eines Model Gate-API-Schlüssels ermöglichen. Zertifikat-Pinning, ein privater Vertrauensspeicher, signierte Anforderungen, ein hartcodiertes Modell oder ein Remote-Erweiterungshost können verhindern, dass diese Methode funktioniert. Eine URL-Umschreibung wandelt OpenAI-Chat-Abschlüsse nicht in Anthropic-Nachrichten oder -Antworten um, fügt keine Modellfunktionen hinzu und ersetzt auch nicht die GitHub-Authentifizierung.
Fangen Sie nur Anwendungen und Datenverkehr ab, deren Eigentümer Sie sind oder zu deren Einsichtnahme Sie berechtigt sind. Holen Sie die Genehmigung für verwaltete Workstations ein. mitmproxy sieht entschlüsselte Eingabeaufforderungen, Quellcode und Authentifizierungsheader; Sein lokaler privater CA-Schlüssel kann sich gegenüber Clients, die ihm vertrauen, als HTTPS-Server ausgeben. Geben Sie keine privaten CA-Schlüssel weiter, exportieren Sie keine ungeschwärzten Flows/HAR-Dateien, stellen Sie die Benutzeroberfläche nicht dem Netzwerk zur Verfügung und deaktivieren Sie die TLS-Überprüfung nicht.
Was dieses Beispiel ändert
Das Beispiel ordnet genau diesen Quellursprung dem Modell-API-Ursprung zu, der in der Dokumentation dieser Site gezeigt wird:
https://api.deepseek.com/v1/chat/completions
-> local mitmproxy
-> https://api.model-gate.com/v1/chat/completions
Konfigurieren Sie a dedizierter Model Gate API-Schlüssel, kein DeepSeek-Schlüssel, im Anmeldeinformationsfeld des Kunden. Wählen Sie ein aktiviertes Model Gate-Modell oder einen vom Administrator verwalteten Alias aus Modellkatalog. Verwenden Sie den in diesem Handbuch gezeigten Modell-API-Ursprung mit dem passenden API-Schlüssel. Verwenden Sie nicht das Panel oder den Partner-API-Host.
Die Regel bearbeitet nicht absichtlich die HTTP-Methode, den Pfad, die Abfrage, den JSON-Text usw. model, Authorization, oder der JSON stream Wert. Es ändert das Ziel und den HTTP-Host / HTTP/2 :authority; Upstream-TLS stellt eine Verbindung zum neuen Ziel her. Auch die HTTP-Version, die Schreibweise/Reihenfolge der Header, die Verbindungsheader und das Framing können unterschiedlich sein. Dabei handelt es sich nicht um eine Byte-für-Byte-Bewahrung aller Header oder des Netzwerkverkehrs.
Nur-Antwort-Streaming vorbereiten (beide Systeme)
Speichern Sie Folgendes unter model-gate-response-stream.py in Ihrem Arbeitsverzeichnis. Die gleiche Datei ist in der Veröffentlichung in der PHP-Anwendung unter enthalten deploy/client-tools/; Es läuft innerhalb von mitmproxy und erfordert keine separate Python-Installation, wenn das native Paket verwendet wird.
"""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
Der eingebaute map_remote Addon schreibt das Ziel im um Anfrage Hook, nachdem der Anfragetext gelesen wurde. Lassen Sie das Anforderungsstreaming deaktiviert, bis das Umschreiben erfolgt ist. Nicht verwenden --set stream_large_bodies=1 mit diesem Rezept: Es kann die ursprüngliche Anfrage vor dem Umschreiben weiterleiten. Das obige kleine Add-on ermöglicht nur Antwort-Streaming, einschließlich SSE, ohne den JSON-Body zu ändern oder Anfragen erneut abzuspielen.
Die folgenden Befehle verwenden --set stream_large_bodies ohne Gleichheitszeichen oder Wert um diese optionale Einstellung zurückzusetzen None, und deaktivieren Sie explizit die Streamed-Body-Aufbewahrung. Das Addon lehnt die spätere Aktivierung eines globalen Streaming-Schwellenwerts ab. Entfernen Sie andere Request-Streaming-/Rewrite-Add-ons aus dieser dedizierten Sitzung und beheben Sie alle Startfehler, bevor Sie einen Schlüssel im Client platzieren. Der Proxy ist keine Fail-Closed-Anmeldeinformationsgrenze: Validieren Sie die Route zuerst mit einem Dummy-Schlüssel.
Windows: Visual Studio-Beispiel
Installieren Sie das offizielle native Windows-Paket von mitmproxy-Downloads. Öffnen Sie PowerShell erneut und überprüfen Sie mitmweb --version. Installieren Sie dieses Windows-Prozessbeispiel nicht innerhalb der WSL.
Erstellen Sie die lokale Zertifizierungsstelle dieser Installation und vertrauen Sie ihr
Starten Sie einmal unter demselben Windows-Konto, unter dem der Proxy ausgeführt wird:
mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1
Stoppen Sie es nach dem Start mit Strg+C. mitmproxy erstellt seine CA in %USERPROFILE%\.mitmproxy. Bevorzugen Aktueller Benutzer Vertrauen für eine Anwendung, die wie Sie ausgeführt wird:
$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.' }
Vertrauen Sie nur der Zertifizierungsstelle, die von Ihrer eigenen Installation generiert wurde. mitmproxy-ca-cert.cer ist das öffentliche Zertifikat; mitmproxy-ca.pem enthält auch den privaten Schlüssel und muss privat bleiben. Starten Sie Visual Studio neu, nachdem Sie die Vertrauensstellung geändert haben.
Nur wenn ein genehmigter Antrag ausdrücklich erforderlich ist Lokale Maschine vertrauen, eine erhöhte PowerShell verwenden und certutil -addstore Root "$ca" ohne -user. Dies vertraut der Zertifizierungsstelle maschinenweit, stellt eine umfassendere Sicherheitsänderung dar und erfordert die entsprechende Entfernung des Maschinenspeichers unten. Erhebung unter a anders Das Administratorkonto verwendet möglicherweise ein anderes Profil und eine andere Zertifizierungsstelle. Halten Sie die Konto-, Zertifikats- und Proxy-Konfiguration konsistent.
Erfassen Sie nur den vorgesehenen Prozess und Host
Führen Sie natives PowerShell als Administrator aus, wenn die Windows-Erfassungsberechtigungen dies erfordern, und verwenden Sie dabei dasselbe Konto/Profil. Starten Sie zunächst Visual Studio. Dieses Beispiel zielt auf den Prozessnamen ab 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/'
Nach dem Zeilenfortsetzungs-Backtick von PowerShell dürfen keine Leerzeichen stehen. Die verankerte Regel entspricht nur dem angegebenen HTTPS-Ursprung, einschließlich eines expliziten Ports 443; Ein in einer Abfrage vorkommender Anbieter-Hostname oder ein anderer Hostname wird nicht umgeschrieben. Die Host-Zulassungsliste verhindert die Entschlüsselung nicht verwandter Ziele aus dem ausgewählten Prozess. lazy Plus upstream_cert=false vermeidet eine unnötige Zertifikat-Sniffing-Verbindung zum ursprünglichen Anbieter. Die TLS-Überprüfung des tatsächlichen Upstreams ist weiterhin aktiviert.
Visual Studio ist nicht VS-Code. Eine Erweiterung kann Anfragen stattdessen über einen separaten ServiceHub, Sprachserver oder Hilfsprozess senden devenv. Identifizieren Sie den tatsächlichen Prozess, der das Netzwerk besitzt, bevor Sie die Erfassung erweitern. So überprüfen Sie Visual Studio-Instanzen:
Get-Process -Name devenv | Select-Object Id, ProcessName, Path
Ersetzen local:devenv mit local:12345 unter Verwendung der tatsächlichen PID oder einer durch Kommas getrennten Liste explizit identifizierter PIDs. PIDs ändern sich nach Neustarts. Nicht verwenden $PID für eine benutzerdefinierte PowerShell-Variable; es bezieht sich auf den eigenen Prozess von PowerShell. Wechseln Sie nicht zur Vollmaschine --mode local lediglich um eine fehlende Anfrage erscheinen zu lassen.
Linux: die gleiche bereichsbezogene Zuordnung
Installieren Sie einen aktuellen offiziellen Mitmproxy-Build und überprüfen Sie ihn mitmweb --version Und uname -r. Local Capture verwendet eBPF; Der offizielle Support ist Linux 6.8. Es braucht einen privilegierten Helfer, der durchstarten kann sudo. Laufen mitmweb als Ihr normaler Benutzer mit --mode local:... in der Befehlszeile, damit dieses Privileg angefordert werden kann; Vermeiden Sie es, den gesamten Proxy auf Root umzustellen und ihn versehentlich zu verwenden /root/.mitmproxy.
Initialisieren Sie zunächst die Zertifizierungsstelle unter Ihrem normalen Konto und hören Sie dann auf Strg+C:
mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1
Bevorzugen Sie den dokumentierten benutzerdefinierten CA-Mechanismus der Anwendung. An Ubuntu/Debian, können Anwendungen, die den System-Truststore verwenden, stattdessen diese optionale, systemweite Installation verwenden:
sudo install -m 0644 "$HOME/.mitmproxy/mitmproxy-ca-cert.pem" \
/usr/local/share/ca-certificates/model-gate-local-mitmproxy.crt
sudo update-ca-certificates
Starten Sie den Client neu. Ein privater Java-/Knoten-/Browser-Vertrauensspeicher oder eine begrenzte Anwendung benötigt möglicherweise eine eigene dokumentierte Vertrauenseinrichtung. Der Import in den Betriebssystemspeicher garantiert nicht, dass jeder Client ihm vertraut. Andere Distributionen verwenden ihre eigenen CA-Store-Prozeduren.
Für einen lokalen VS-Code-Prozess mit dem Namen code, die Zuordnung ist:
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/'
Verwenden Sie wie unter Windows den eigentlichen anforderungserzeugenden Prozess/PID, nicht unbedingt das Editorfenster. Überprüfen ps -eo pid,comm,args und ersetzen local:12345 nach Bedarf. Der Linux-Namensabgleich ist auf die ersten 16 Zeichen beschränkt. Die lokale Erfassung auf WSL wird nicht unterstützt und Container benötigen für diesen Modus ein Hostnetzwerk. Der Datenverkehr von einem SSH-/Remote-Erweiterungshost muss auf dem Computer konfiguriert werden, auf dem dieser Prozess ausgeführt wird, und nicht nur auf Ihrem Desktop.
Streaming, Wege und andere Anbieter
Das Nur-Antwort-Add-on leitet HTTP-Antworten weiter, ohne auf die vollständige Antwort zu warten, was für die SSE-Token-Zustellung wichtig ist. Anforderungstexte bleiben bis dahin gepuffert map_remote hat das Ziel geändert. Streaming-Körper werden standardmäßig nicht zur Überprüfung aufbewahrt; Kopfzeilen und Status bleiben nützlich. Aktivieren Sie die Body-Retention oder den Flow-Export nicht nur zur Fehlerbehebung bei einem Schlüssel. Diese Einstellung ändert nichts am JSON-Code des Clients stream Flag und kann keinen Stream eines Nicht-Streaming-Anbieters erstellen.
Die Standardzuordnung behält Pfade bei. Ein Kunde sendet /chat/completions ohne /v1 sendet diesen Pfad weiterhin an Model Gate und erhält möglicherweise 404. Nur für eine Quell-API, deren Pfade bekanntermaßen diese Normalisierung erfordern, ersetzen Sie die map_remote Wert mit:
map_remote=|^https://api\.deepseek\.com(?::443)?/(?:v1/)?|https://api.model-gate.com/v1/
Dies fügt absichtlich eins hinzu /v1/ Präfix, wobei ein vorhandenes erhalten bleibt, der verbleibende Pfad und die Abfrage. Es handelt sich um eine separate pfadverändernde Variante, nicht um das Nur-Ursprungs-Beispiel. Überprüfen Sie den resultierenden Endpunkt, bevor Sie eine echte Eingabeaufforderung senden.
Ersetzen Sie für einen anderen Anbieter den genauen Quell-Hostnamen in beide allow-hosts Und map_remote, maskieren Sie Regex-Punkte und wählen Sie den richtigen Zielursprung/Pfad. Halten Sie das Streichholz verankert mit ^https:// und eine Hostnamengrenze; Verwenden Sie niemals einen breiten Teilstring-Ersatz. Vorhandene gespeicherte Add-ons oder Rewrite-Regeln können das Ergebnis verändern. Überprüfen Sie daher vor dem Testen Ihre Mitmproxy-Konfiguration.
Abnahme und Fehlerbehebung
Erstes Testrouting mit Dummy-Anmeldeinformationen und nicht vertraulicher Eingabeaufforderung; ein Authentifizierungsfehler am vorgesehenen Ziel wird erwartet. Stellen Sie erst nach Bestätigung des Ziels eine bewusst kleine Anfrage mit einem dedizierten begrenzten Schlüssel. Schlussfolgerungen können kostenpflichtig sein. Überprüfen Sie in mitmweb, ob das Ziel der vorgesehene Model Gate API-Host ist, der Pfad unterstützt wird, die Modell-ID/das Alias vorhanden ist und der HTTP-Status erfolgreich ist. Überprüfen Sie den Model Gate-Anfrageverlauf und stellen Sie sicher, dass der gestreamte Text nach und nach eintrifft. Veröffentlichen Sie keinen Autorisierungsheader oder Flow-Export als Beweis.
Keine erfasste Anfrage. Der tatsächliche Helfer/PID, Erfassungsrechte, lokale oder Remote-Ausführung, Quell-Hostname und Kernel-Unterstützung.
Fehler beim TLS-Zertifikat. Korrigieren Sie CA/Profil/Store und den Client-Neustart. Das Anheften von Zertifikaten stellt eine Kompatibilitätsbeschränkung dar und ist kein Grund, die Überprüfung zu deaktivieren.
401. Der Client muss einen Model Gate-Schlüssel für das passende Konto/die entsprechende API-Domäne verwenden; map_remote tauscht keine Anmeldeinformationen aus.
404. Überprüfen Sie den tatsächlichen Pfad. Nur-Ursprungs-Zuordnung fügt nicht hinzu /v1.
400 bzw messages.0 / system Fehler. Überprüfen Sie die Kompatibilität des Anforderungsprotokolls. Bei einer Ursprungsumschreibung werden keine Nachrichtenrollen oder andere JSON-Felder übersetzt.
Modell nicht verfügbar. Verwenden Sie eine aktivierte kanonische ID oder einen vorhandenen Alias. Die Zuordnung wird nicht umbenannt model.
Streaming kommt auf einmal. Überprüfen Sie, ob das Nur-Antwort-Addon des Clients erfolgreich geladen wurde stream Mehrwert und tatsächliche Anbieterunterstützung. Aktivieren Sie kein globales Anforderungsstreaming.
Stoppen Sie und entfernen Sie das Vertrauen
Bevor Sie das Abfangen beenden, schließen Sie den Client oder entfernen Sie den Model Gate-Schlüssel aus seiner ursprünglichen Anbieterkonfiguration. Andernfalls kann die nächste direkte Anfrage diesen Schlüssel an den ursprünglichen Anbieter senden. Gehen Sie nicht davon aus, dass das Stoppen des Proxys fehlschlägt. Stoppen Sie mitmweb mit Strg+C und stellen Sie dann die normalen Endpunkt-/Schlüsseleinstellungen des Clients wieder her.
Für Windows Aktueller Benutzer Importieren Sie oben, entfernen Sie nur das genaue Zertifikat dieser Installation:
$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.' }
Für das optionale Lokale Maschine importieren, eine erhöhte Shell verwenden und certutil -delstore Root $cert.Thumbprint stattdessen. Bewahren Sie die öffentliche CA-Datei auf, bis Sie das passende vertrauenswürdige Zertifikat identifiziert und entfernt haben. Löschen Sie keine nicht verwandten vertrauenswürdigen Roots nach Namen.
Für den systemweiten Ubuntu/Debian-Import oben:
sudo rm -- /usr/local/share/ca-certificates/model-gate-local-mitmproxy.crt
sudo update-ca-certificates --fresh
Entfernen Sie auch alle anwendungsspezifischen CA-Konfigurationen. Clients neu starten. Löschen Sie sensible erfasste Artefakte und drehen Sie die dedizierte Model Gate-Taste, wenn sie freigelegt oder an ein unbeabsichtigtes Ziel gesendet wurden. Für diese Workstation-Schritte ist keine Änderung von Nginx, Server Trust Stores oder Produktion erforderlich .env Dateien oder die TLS-Richtlinie von Model Gate.
Offizielle Referenzen
Bewertet am 08.09.2026. Bestätigen Sie die Optionen anhand Ihrer installierten Optionen mitmweb --options; Clienterfassung und Vertrauensverhalten müssen noch auf Ihrer Workstation getestet werden.
- mitmproxy Local Capture-Modi und Einschränkungen
- mitmproxy URL-Zuordnung und Streaming
- Beispiel für ein Mitmproxy-Response-Streaming-Add-on
- mitmproxy map_remote Request-Hook-Implementierung
- mitmproxy-Optionen
- mitmproxy CA-Zertifikate und Pinning
- mitmproxy HTTP-Anfrageziel und -autorität
- Microsoft-Zertifikat
- Installation und Entfernung von Ubuntu CA