Eindpuntoverschrijving op Windows en Linux

Leid het vaste HTTPS-eindpunt van een geautoriseerde lokale client via mitmproxy, met scoped capture, TLS-vertrouwen, streaming en rollback.

Gebruik de ingebouwde client Basis-URL/aangepast eindpunt/BYOK waar mogelijk instellen. Zien Verbindingshandleidingen En GitHub-copiloot. Lokale HTTPS-onderschepping is een optionele terugval voor een client die zijn eindpunt niet kan wijzigen, en is geen vereiste voor het gebruik van Model Gate.

Dit is niet universeel compatibel. De client moet een protocol, pad en model verzenden dat wordt ondersteund door uw Model Gate-account, uw lokale certificeringsinstantie accepteren en u toestaan ​​een Model Gate API-sleutel te configureren. Het vastzetten van certificaten, een privévertrouwensopslag, ondertekende verzoeken, een hardgecodeerd model of een externe extensiehost kunnen ervoor zorgen dat deze methode niet werkt. Het herschrijven van een URL converteert OpenAI Chat-voltooiingen niet naar antropische berichten of reacties, voegt geen modelmogelijkheden toe of vervangt GitHub-authenticatie.

Onderschep alleen applicaties en verkeer waarvan u de eigenaar bent of waarvoor u toestemming heeft om deze te inspecteren. Verkrijg goedkeuring op beheerde werkstations. mitmproxy ziet gedecodeerde aanwijzingen, broncode en authenticatieheaders; de lokale CA-privésleutel kan HTTPS-servers imiteren voor clients die deze vertrouwen. Deel geen persoonlijke CA-sleutels, exporteer geen ongeredigeerde stromen/HAR-bestanden, stel de gebruikersinterface niet bloot aan het netwerk en schakel geen TLS-verificatie uit.

Wat dit voorbeeld verandert

Het voorbeeld wijst precies deze bronoorsprong toe aan de Model API-oorsprong die wordt weergegeven in de documentatie van deze site:

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

Configureer een speciale Model Gate API-sleutel, en niet een DeepSeek-sleutel, in het inlogveld van de klant. Kies een ingeschakeld Model Gate-model of door de beheerder beheerde alias uit de model catalogus. Gebruik de oorsprong van de Model-API die in deze handleiding wordt weergegeven met de bijbehorende API-sleutel; gebruik niet het paneel of de Partner API-host.

De regel bewerkt niet opzettelijk de HTTP-methode, het pad, de query, de JSON-body, model, Authorizationof de JSON stream waarde. Het verandert wel de bestemming en HTTP Host / HTTP/2:authority; upstream TLS maakt verbinding met de nieuwe bestemming. HTTP-versie, headerbehuizing/volgorde, verbindingsheaders en framing kunnen ook verschillen. Het is geen byte-voor-byte behoud van alle headers of netwerkverkeer.

Alleen respons-streaming voorbereiden (beide systemen)

Sla het volgende op als model-gate-response-stream.py in uw werkmap. Hetzelfde bestand is opgenomen in de release in de PHP-applicatie op deploy/client-tools/; het draait binnen mitmproxy en heeft geen aparte Python-installatie nodig als je het native pakket gebruikt.

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

De ingebouwde map_remote addon herschrijft de bestemming in het verzoek hook, nadat de hoofdtekst van het verzoek is gelezen. Houd het streamen van verzoeken uitgeschakeld totdat het herschrijven heeft plaatsgevonden. Niet gebruiken --set stream_large_bodies=1 met dit recept: het kan het oorspronkelijke verzoek vóór het herschrijven doorsturen. De kleine add-on hierboven maakt alleen responsstreaming mogelijk, inclusief SSE, zonder de JSON-body te wijzigen of verzoeken opnieuw af te spelen.

De onderstaande commando's gebruiken --set stream_large_bodies zonder een gelijkteken of waarde om deze optionele instelling opnieuw in te stellen Noneen schakel de retentie van gestreamde body expliciet uit. De add-on weigert later een globale streamingdrempel in te schakelen. Verwijder andere add-ons voor het streamen/herschrijven van verzoeken uit deze speciale sessie en los eventuele opstartfouten op voordat u een sleutel in de client plaatst. De proxy is geen fail-closed referentiegrens: valideer de route eerst met een dummysleutel.

Windows: Visual Studio-voorbeeld

Installeer het officiële native Windows-pakket van mitmproxy-downloads. Open PowerShell opnieuw en controleer mitmweb --version. Installeer niet binnen WSL voor dit Windows-procesvoorbeeld.

Maak en vertrouw de lokale CA van deze installatie

Begin één keer onder hetzelfde Windows-account dat de proxy zal uitvoeren:

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

Stop het na het opstarten met Ctrl+C. mitmproxy maakt zijn CA aan in %USERPROFILE%\.mitmproxy. De voorkeur geven aan Huidige gebruiker vertrouwen voor een applicatie die wordt uitgevoerd zoals u:

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

Vertrouw alleen de CA die door uw eigen installatie is gegenereerd. mitmproxy-ca-cert.cer is het openbare certificaat; mitmproxy-ca.pem bevat ook de privésleutel en moet privé blijven. Start Visual Studio opnieuw nadat u het vertrouwen hebt gewijzigd.

Alleen wanneer een goedgekeurde aanvraag dit specifiek nodig heeft Lokale machine vertrouwen, gebruik een verhoogde PowerShell en certutil -addstore Root "$ca" zonder -user. Dit vertrouwt de CA voor de hele machine, is een bredere beveiligingswijziging en vereist de onderstaande verwijdering van de overeenkomende machineopslag. Hoogte onder a verschillend beheerdersaccount kan een ander profiel en een andere CA gebruiken; houd de account-, certificaat- en proxyconfiguratie consistent.

Leg alleen het beoogde proces en de host vast

Voer native PowerShell uit als beheerder wanneer dit vereist is door Windows-opnamemachtigingen, met hetzelfde account/profiel. Start eerst Visual Studio. Dit voorbeeld richt zich op de procesnaam 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/'

Er mogen geen spaties staan ​​na de regelvervolg-backtick van PowerShell. De verankerde regel komt alleen overeen met de opgegeven HTTPS-oorsprong, inclusief een expliciete poort 443; een hostnaam van een provider die voorkomt in een query of een andere hostnaam wordt niet herschreven. De host-acceptatielijst vermijdt het decoderen van niet-gerelateerde bestemmingen uit het geselecteerde proces. lazy plus upstream_cert=false vermijdt een onnodige certificaat-snuffelverbinding met de oorspronkelijke provider. TLS-verificatie van de daadwerkelijke upstream is nog steeds ingeschakeld.

Visuele Studio is niet VS-code. Een extensie kan verzoeken verzenden via een afzonderlijk ServiceHub-, taalserver- of helperproces in plaats van devenv. Identificeer het daadwerkelijke proces van netwerkeigendom voordat u de opname verbreedt. Visual Studio-instanties inspecteren:

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

Vervangen local:devenv met local:12345 met behulp van de daadwerkelijke PID, of een door komma's gescheiden lijst van expliciet geïdentificeerde PID's. PID's veranderen na opnieuw opstarten. Niet gebruiken $PID voor een aangepaste PowerShell-variabele; het verwijst naar het eigen proces van PowerShell. Schakel niet over naar een hele machine --mode local alleen maar om een ​​ontbrekend verzoek te laten verschijnen.

Linux: dezelfde scoped mapping

Installeer een huidige officiële mitmproxy-build en controleer mitmweb --version En uname -r. Local Capture maakt gebruik van eBPF; de officiële ondersteuningsvloer is Linux 6.8. Er is een bevoorrechte helper voor nodig sudo. Loop mitmweb als uw gewone gebruiker --mode local:... op de opdrachtregel zodat het dat recht kan aanvragen; vermijd het omzetten van de hele proxy naar root en per ongeluk gebruiken /root/.mitmproxy.

Initialiseer eerst de CA onder uw gewone account en stop dan met Ctrl+C:

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

Geef de voorkeur aan het gedocumenteerde aangepaste CA-mechanisme van de applicatie. Op Ubuntu/Debian, kunnen toepassingen die gebruik maken van de systeemvertrouwensopslag in plaats daarvan deze optionele, systeembrede installatie gebruiken:

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

Start de cliënt opnieuw op. Een privé Java/Node/browser-vertrouwensopslag of een beperkte toepassing heeft mogelijk een eigen gedocumenteerde vertrouwensconfiguratie nodig; importeren in de OS-winkel garandeert niet dat elke client het vertrouwt. Andere distributies gebruiken hun eigen CA-winkelprocedures.

Voor een lokaal VS Code-proces met de naam code, de toewijzing is:

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

Gebruik, net als bij Windows, het eigenlijke verzoekproductieproces/PID, niet noodzakelijkerwijs het editorvenster. Inspecteren ps -eo pid,comm,args en substituut local:12345 zoals nodig. Het matchen van Linux-namen is beperkt tot de eerste 16 tekens. Local Capture op WSL wordt niet ondersteund en containers hebben voor deze modus een hostnetwerk nodig. Verkeer van een SSH/externe extensiehost moet worden geconfigureerd op de machine waarop dat proces wordt uitgevoerd, en niet alleen op uw bureaublad.

Streaming, paden en andere providers

De add-on voor alleen antwoorden stuurt HTTP-antwoorden door zonder te wachten op het volledige antwoord, wat belangrijk is voor de levering van SSE-tokens. Aanvraaglichamen blijven gebufferd tot map_remote heeft de bestemming gewijzigd. Streaming-instanties worden standaard niet voor inspectie vastgehouden; headers en status blijven nuttig. Schakel lichaamsretentie of stroomexport niet alleen in om problemen met een sleutel op te lossen. Deze instelling verandert de JSON van de client niet stream vlag en kan een niet-streamingprovider niet laten streamen.

Bij de standaardtoewijzing blijven paden behouden. Een klant die verzendt /chat/completions zonder /v1 zal dat pad nog steeds naar Model Gate sturen en mogelijk 404 ontvangen. Alleen voor een bron-API waarvan bekend is dat de paden deze normalisatie vereisen, vervang de map_remote waarde met:

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

Dit voegt er bewust één toe /v1/ voorvoegsel, met behoud van een bestaand voorvoegsel, het resterende pad en de query. Het is een aparte baanveranderende variant, niet het voorbeeld met alleen de oorsprong. Controleer het resulterende eindpunt voordat u een echte prompt verzendt.

Voor een andere provider vervangt u de exacte bronhostnaam in beide allow-hosts En map_remote, ontsnap aan regex-punten en kies de juiste doeloorsprong/pad. Houd de wedstrijd verankerd met ^https:// en een hostnaamgrens; gebruik nooit een brede subtekenreeksvervanging. Bestaande opgeslagen add-ons of herschrijfregels kunnen het resultaat veranderen, dus inspecteer uw mitmproxy-configuratie voordat u gaat testen.

Acceptatie en probleemoplossing

Eerste testrouting met een dummy-referentie en een niet-gevoelige prompt; er wordt een authenticatiefout op het beoogde doel verwacht. Pas nadat de bestemming is bevestigd, kunt u een opzettelijk klein verzoek indienen met een speciale beperkte sleutel; gevolgtrekking kan factureerbaar zijn. Controleer in mitmweb of de bestemming de beoogde Model Gate API-host is, het pad wordt ondersteund, de model-ID/alias bestaat en de HTTP-status succesvol is. Controleer de Model Gate Request History en bevestig dat de gestreamde tekst geleidelijk arriveert. Publiceer geen autorisatiekop of stroomexport als bewijsmateriaal.

Geen vastgelegd verzoek. De daadwerkelijke helper/PID, capture-privileges, lokale versus externe uitvoering, bronhostnaam en kernelondersteuning.

TLS-certificaat mislukt. Correcte CA/profiel/winkel en clientherstart. Het vastzetten van certificaten is een compatibiliteitsbeperking en geen reden om de verificatie uit te schakelen.

401. De klant moet een Model Gate-sleutel gebruiken voor het overeenkomende account/API-domein; map_remote wisselt geen inloggegevens uit.

404. Inspecteer het daadwerkelijke pad; alleen-oorsprong-toewijzing voegt niets toe /v1.

400 of messages.0 / system fout. Controleer de compatibiliteit van het aanvraagprotocol. Een herschrijving van de oorsprong vertaalt geen berichtrollen of andere JSON-velden.

Model niet beschikbaar. Gebruik een ingeschakelde canonieke ID of bestaande alias; mapping wordt niet hernoemd model.

Streaming arriveert allemaal tegelijk. Controleer of de alleen-antwoord-add-on succesvol is geladen, die van de client stream waarde en daadwerkelijke ondersteuning van de provider. Schakel het streamen van globale verzoeken niet in.

Stop en verwijder het vertrouwen

Voordat u de onderschepping stopt, sluit u de client of verwijdert u de Model Gate-sleutel uit de oorspronkelijke providerconfiguratie. Anders kan het volgende directe verzoek die sleutel naar de oorspronkelijke provider sturen. Ga er niet vanuit dat het stoppen van de proxy mislukt. Stop mitmweb met Ctrl+C en herstel vervolgens de normale eindpunt-/sleutelinstellingen van de client.

Voor de ramen Huidige gebruiker importeer hierboven, verwijder alleen het exacte certificaat van deze installatie:

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

Voor het optionele Lokale machine import, gebruik een verhoogde shell en certutil -delstore Root $cert.Thumbprint in plaats van. Bewaar het openbare CA-bestand totdat u het overeenkomende vertrouwde certificaat hebt geïdentificeerd en verwijderd; verwijder geen niet-gerelateerde vertrouwde wortels op naam.

Voor de Ubuntu/Debian-systeembrede import hierboven:

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

Verwijder ook alle applicatiespecifieke CA-configuraties. Klanten opnieuw opstarten. Verwijder gevoelige vastgelegde artefacten en draai de speciale Model Gate-sleutel als deze is blootgesteld of naar een onbedoelde bestemming is verzonden. Voor deze werkstationstappen zijn geen wijzigingen in nginx, serververtrouwensopslag en productie vereist .env bestanden of het TLS-beleid van Model Gate.

Officiële referenties

Beoordeeld op 08-09-2026. Bevestig de opties tegen uw geïnstalleerde mitmweb --options; client capture en trust-gedrag vereisen nog steeds testen op uw werkstation.