Override dell'endpoint su Windows e Linux

Instrada l'endpoint HTTPS fisso di un client locale autorizzato tramite mitmproxy, con acquisizione con ambito, attendibilità TLS, streaming e rollback.

Utilizzare il built-in del client URL di base/endpoint personalizzato/BYOK impostazione quando possibile. Vedere Guide alla connessione E Copilota GitHub. L'intercettazione HTTPS locale è un fallback facoltativo per un client che non può modificare il proprio endpoint, non un requisito per l'utilizzo di Model Gate.

Questo non è universalmente compatibile. Il client deve inviare un protocollo, un percorso e un modello supportati dal tuo account Model Gate, accettare l'autorità di certificazione locale e consentirti di configurare una chiave API Model Gate. Il blocco dei certificati, un trust store privato, le richieste firmate, un modello hardcoded o un host di estensione remoto possono impedire il funzionamento di questo metodo. Una riscrittura dell'URL non converte i completamenti della chat OpenAI in messaggi o risposte antropiche, non aggiunge funzionalità del modello né sostituisce l'autenticazione GitHub.

Intercetta solo le applicazioni e il traffico di tua proprietà o che sei autorizzato a ispezionare. Ottenere l'approvazione sulle workstation gestite. mitmproxy vede prompt, codice sorgente e intestazioni di autenticazione decrittografati; la sua chiave privata CA locale può impersonare i server HTTPS per i client che si fidano di esso. Non condividere chiavi private della CA, esportare flussi/file HAR non oscurati, esporre l'interfaccia utente alla rete o disabilitare la verifica TLS.

Cosa cambia questo esempio

L'esempio mappa esattamente questa origine di origine all'origine dell'API del modello mostrata nella documentazione di questo sito:

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

Configura un chiave API Model Gate dedicata, non una chiave DeepSeek, nel campo delle credenziali del cliente. Scegli un modello Model Gate abilitato o un alias gestito dall'amministratore da catalogo modelli. Utilizza l'origine dell'API del modello mostrata in questa guida con la chiave API corrispondente; non utilizzare il pannello o l'host API Partner.

La regola non modifica intenzionalmente il metodo HTTP, il percorso, la query, il corpo JSON, model, Authorizationo il JSON stream valore. Cambia la destinazione e l'host HTTP / HTTP/2 :authority; TLS a monte si connette alla nuova destinazione. Anche la versione HTTP, l'ordine/maiuscolo dell'intestazione, le intestazioni di connessione e il framing possono differire. Non si tratta della conservazione byte per byte di tutte le intestazioni o del traffico di rete.

Preparare lo streaming di sola risposta (entrambi i sistemi)

Salva quanto segue con nome model-gate-response-stream.py nella tua directory di lavoro. Lo stesso file è incluso nella versione all'interno dell'applicazione PHP all'indirizzo deploy/client-tools/; funziona all'interno di mitmproxy e non necessita di installazione Python separata quando si utilizza il pacchetto nativo.

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

L'integrato map_remote il componente aggiuntivo riscrive la destinazione nel file richiesta hook, dopo aver letto il corpo della richiesta. Mantieni lo streaming delle richieste disabilitato finché non viene eseguita la riscrittura. Non utilizzare --set stream_large_bodies=1 con questa ricetta: può inoltrare la richiesta originale prima della riscrittura. Il piccolo componente aggiuntivo riportato sopra consente solo lo streaming di risposte, incluso SSE, senza modificare il corpo JSON o riprodurre le richieste.

I comandi seguenti utilizzano --set stream_large_bodies senza segno o valore uguale per ripristinare questa impostazione opzionale su Nonee disabilitare esplicitamente la conservazione del corpo trasmesso in streaming. Il componente aggiuntivo rifiuta l'abilitazione successiva di una soglia di streaming globale. Rimuovi altri componenti aggiuntivi di streaming/riscrittura delle richieste da questa sessione dedicata e risolvi eventuali errori di avvio prima di inserire una chiave nel client. Il proxy non è un limite di credenziali a chiusura di errore: convalida prima il percorso con una chiave fittizia.

Windows: esempio di Visual Studio

Installa il pacchetto Windows nativo ufficiale da Download di mitmproxy. Riapri PowerShell e controlla mitmweb --version. Non eseguire l'installazione all'interno di WSL per questo esempio di processo Windows.

Crea e considera attendibile la CA locale di questa installazione

Inizia una volta con lo stesso account Windows che eseguirà il proxy:

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

Dopo l'avvio, interrompilo con CTRL+C. mitmproxy crea la sua CA in %USERPROFILE%\.mitmproxy. Preferisco Utente corrente fidati di un'applicazione in esecuzione come te:

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

Considera attendibile solo la CA generata dalla tua installazione. mitmproxy-ca-cert.cer è il certificato pubblico; mitmproxy-ca.pem contiene anche la chiave privata e deve rimanere privata. Riavviare Visual Studio dopo aver modificato l'attendibilità.

Solo quando una richiesta approvata è specificamente necessaria Macchina locale fidati, usa un PowerShell elevato e certutil -addstore Root "$ca" senza -user. Ciò considera attendibile la CA a livello di macchina, rappresenta una modifica di sicurezza più ampia e richiede la rimozione dell'archivio macchina corrispondente di seguito. Altitudine sotto a diverso l'account amministratore può utilizzare un profilo e una CA diversi; mantenere coerenti la configurazione dell'account, del certificato e del proxy.

Cattura solo il processo e l'host previsti

Esegui PowerShell nativo come amministratore quando richiesto dalle autorizzazioni di acquisizione di Windows, utilizzando lo stesso account/profilo. Avvia prima Visual Studio. Questo esempio prende di mira il nome del processo 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/'

Non devono essere presenti spazi dopo il backtick di continuazione della riga di PowerShell. La regola ancorata corrisponde solo all'origine HTTPS specificata, inclusa una porta esplicita 443; un nome host del provider che si verifica all'interno di una query o un altro nome host non viene riscritto. L'elenco consentito degli host evita di decrittografare destinazioni non correlate dal processo selezionato. lazy più upstream_cert=false evita una connessione di sniffing dei certificati non necessaria al provider originale. La verifica TLS dell'effettivo upstream è ancora abilitata.

Visual Studio lo è non Codice VS. Un'estensione può inviare richieste tramite un ServiceHub separato, un server linguistico o un processo di supporto anziché devenv. Identificare l'effettivo processo di proprietà della rete prima di ampliare l'acquisizione. Per ispezionare le istanze di Visual Studio:

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

Sostituire local:devenv con local:12345 utilizzando il PID effettivo o un elenco separato da virgole di PID esplicitamente identificati. I PID cambiano dopo i riavvii. Non utilizzare $PID per una variabile PowerShell personalizzata; si riferisce al processo di PowerShell. Non passare alla macchina intera --mode local semplicemente per far apparire una richiesta mancante.

Linux: la stessa mappatura con ambito

Installa una build mitmproxy ufficiale corrente e controlla mitmweb --version E uname -r. L'acquisizione locale utilizza eBPF; il piano di supporto ufficiale è Linux 6.8. Ha bisogno di un aiutante privilegiato che abbia iniziato sudo. Correre mitmweb come il tuo utente normale con --mode local:... sulla riga di comando in modo che possa richiedere quel privilegio; evitare di passare l'intero proxy a root e di utilizzarlo accidentalmente /root/.mitmproxy.

Inizializza prima la CA con il tuo account ordinario, quindi fermati con CTRL+C:

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

Preferire il meccanismo di CA personalizzato documentato dell'applicazione. SU Ubuntu/Debian, le applicazioni che utilizzano l'archivio attendibilità di sistema possono invece utilizzare questa installazione facoltativa a livello di sistema:

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

Riavviare il client. Un trust store Java/nodo/browser privato o un'applicazione confinata potrebbe necessitare di una propria configurazione di trust documentata; l'importazione nell'archivio del sistema operativo non garantisce che ogni client si fidi di esso. Altre distribuzioni utilizzano le proprie procedure di archivio CA.

Per un processo VS Code locale denominato code, la mappatura è:

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

Come su Windows, utilizzare l'effettivo processo/PID di produzione della richiesta, non necessariamente la finestra dell'editor. Ispezionare ps -eo pid,comm,args e sostituire local:12345 secondo necessità. La corrispondenza dei nomi Linux è limitata ai primi 16 caratteri. L'acquisizione locale su WSL non è supportata e i contenitori necessitano di una rete host per questa modalità. Il traffico proveniente da un host SSH/estensione remota deve essere configurato sulla macchina su cui viene eseguito il processo, non solo sul desktop.

Streaming, percorsi e altri provider

Il componente aggiuntivo di sola risposta inoltra le risposte HTTP senza attendere la risposta completa, il che è importante per la consegna del token SSE. Gli organi della richiesta rimangono tamponati fino al map_remote ha cambiato destinazione. Gli organismi di streaming non vengono conservati per l'ispezione per impostazione predefinita; le intestazioni e lo stato rimangono utili. Non abilitare la conservazione del corpo o l'esportazione del flusso semplicemente per risolvere i problemi di una chiave. Questa impostazione non modifica il JSON del client stream flag e non è possibile creare uno streaming di un provider non di streaming.

La mappatura predefinita preserva i percorsi. Un cliente che invia /chat/completions senza /v1 invierà comunque quel percorso a Model Gate e potrebbe ricevere 404. Solo per un'API di origine i cui percorsi richiedono questa normalizzazione, sostituire il map_remote valore con:

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

Questo ne aggiunge deliberatamente uno /v1/ prefisso, preservandone uno esistente, il percorso rimanente e la query. È una variante separata che cambia percorso, non l’esempio solo dell’origine. Verificare l'endpoint risultante prima di inviare un prompt reale.

Per un provider diverso, sostituisci il nome host di origine esatto in Entrambi allow-hosts E map_remote, esegui l'escape dei punti regex e scegli l'origine/percorso di destinazione corretto. Mantieni la partita ancorata con ^https:// e un limite del nome host; non utilizzare mai una sostituzione di sottostringa ampia. I componenti aggiuntivi salvati esistenti o le regole di riscrittura possono alterare il risultato, quindi controlla la configurazione di mitmproxy prima di testare.

Accettazione e risoluzione dei problemi

Primo test dell'instradamento con una credenziale fittizia e un prompt non sensibile; è previsto un errore di autenticazione presso la destinazione prevista. Solo dopo aver confermato la destinazione, effettuare una richiesta volutamente piccola con una chiave limitata dedicata; l'inferenza può essere fatturabile. In mitmweb, controlla che la destinazione sia l'host API Model Gate previsto, che il percorso sia supportato, che l'ID/alias del modello esista e che lo stato HTTP abbia esito positivo. Controlla la cronologia delle richieste di Model Gate e conferma che il testo in streaming arriva progressivamente. Non pubblicare un'intestazione di autorizzazione o un'esportazione di flusso come prova.

Nessuna richiesta catturata. L'helper/PID effettivo, i privilegi di acquisizione, l'esecuzione locale o remota, il nome host di origine e il supporto del kernel.

Errore del certificato TLS. Correggere CA/profilo/archivio e riavvio del client. Il blocco del certificato rappresenta una limitazione di compatibilità, non un motivo per disabilitare la verifica.

401. Il client deve utilizzare una chiave Model Gate per l'account/dominio API corrispondente; map_remote non scambia credenziali.

404. Ispezionare il percorso effettivo; la mappatura solo dell'origine non viene aggiunta /v1.

400 o messages.0 / system errore. Verificare la compatibilità del protocollo di richiesta. Una riscrittura dell'origine non traduce i ruoli dei messaggi o altri campi JSON.

Modello non disponibile. Utilizzare un ID canonico abilitato o un alias esistente; la mappatura non rinomina model.

Lo streaming arriva tutto in una volta. Controlla che il componente aggiuntivo di sola risposta sia stato caricato correttamente, quello del client stream valore e il supporto effettivo del fornitore. Non abilitare lo streaming delle richieste globali.

Fermati e togli la fiducia

Prima di interrompere l'intercettazione, chiudere il client o rimuovere la chiave Model Gate dalla configurazione del provider originale. Altrimenti la sua successiva richiesta diretta può inviare quella chiave al provider originale. Non dare per scontato che l'arresto del proxy non riesca alla chiusura. Arresta mitmweb con Ctrl+C, quindi ripristina le normali impostazioni di endpoint/chiave del client.

Per Windows Utente corrente importa sopra, rimuovi solo il certificato esatto di questa installazione:

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

Per l'opzionale Macchina locale importare, utilizzare una shell elevata e certutil -delstore Root $cert.Thumbprint Invece. Conserva il file CA pubblico finché non avrai identificato e rimosso il certificato attendibile corrispondente; non eliminare radici attendibili non correlate per nome.

Per l'importazione a livello di sistema Ubuntu/Debian sopra:

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

Rimuovere anche qualsiasi configurazione CA specifica dell'applicazione. Riavviare i client. Elimina gli artefatti sensibili catturati e ruota la chiave dedicata Model Gate se è stata esposta o inviata a una destinazione non prevista. Questi passaggi della workstation non richiedono la modifica di nginx, server trust store e produzione .env file o la policy TLS di Model Gate.

Riferimenti ufficiali

Recensito il 08-09-2026. Conferma le opzioni rispetto a quelle installate mitmweb --options; l'acquisizione del client e il comportamento attendibile richiedono ancora test sulla workstation.