Substituição de endpoint no Windows e Linux
Roteie o endpoint HTTPS fixo de um cliente local autorizado por meio do mitmproxy, com captura com escopo, confiança TLS, streaming e reversão.
Use um cliente integrado URL base/endpoint personalizado/BYOK configuração sempre que possível. Ver Guias de conexão e Copiloto GitHub. A interceptação HTTPS local é um substituto opcional para um cliente que não pode alterar seu endpoint, e não um requisito para usar o Model Gate.
Isto não é universalmente compatível. O cliente deve enviar um protocolo, caminho e modelo suportado pela sua conta Model Gate, aceitar sua autoridade de certificação local e permitir que você configure uma chave API Model Gate. A fixação de certificado, um armazenamento confiável privado, solicitações assinadas, um modelo codificado ou um host de extensão remoto podem impedir que esse método funcione. Uma reescrita de URL não converte conclusões de bate-papo do OpenAI em mensagens ou respostas antrópicas, não adiciona recursos de modelo nem substitui a autenticação do GitHub.
Intercepte apenas aplicativos e tráfego que você possui ou está autorizado a inspecionar. Obtenha aprovação em estações de trabalho gerenciadas. mitmproxy vê prompts descriptografados, código-fonte e cabeçalhos de autenticação; sua chave privada CA local pode representar servidores HTTPS para clientes que confiam nela. Não compartilhe chaves privadas de CA, exporte fluxos/arquivos HAR não editados, exponha sua UI à rede ou desative a verificação TLS.
O que este exemplo muda
O exemplo mapeia exatamente esta origem de origem para a origem da API do modelo mostrada na documentação deste site:
https://api.deepseek.com/v1/chat/completions
-> local mitmproxy
-> https://api.model-gate.com/v1/chat/completions
Configurar um chave de API Model Gate dedicada, não uma chave DeepSeek, no campo de credencial do cliente. Escolha um modelo Model Gate habilitado ou um alias gerenciado pelo administrador na lista catálogo de modelos. Use a origem da API do modelo mostrada neste guia com sua chave de API correspondente; não use o painel ou o host da Partner API.
A regra não edita intencionalmente o método HTTP, caminho, consulta, corpo JSON, model, Authorizationou o JSON stream valor. Isso altera o destino e HTTP Host / HTTP/2 :authority; O TLS upstream se conecta ao novo destino. A versão HTTP, a caixa/ordem do cabeçalho, os cabeçalhos de conexão e o enquadramento também podem ser diferentes. Não se trata de preservação byte por byte de todos os cabeçalhos ou tráfego de rede.
Preparar streaming somente de resposta (ambos os sistemas)
Salve o seguinte como model-gate-response-stream.py em seu diretório de trabalho. O mesmo arquivo está incluído no release dentro da aplicação PHP em deploy/client-tools/; ele é executado dentro do mitmproxy e não precisa de instalação separada do Python ao usar o pacote 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
O embutido map_remote addon reescreve o destino no solicitar hook, depois que o corpo da solicitação for lido. Mantenha o streaming de solicitação desativado até que a reescrita aconteça. Não use --set stream_large_bodies=1 com esta receita: ele pode encaminhar a solicitação original antes da reescrita. O pequeno complemento acima permite apenas streaming de resposta, incluindo SSE, sem modificar o corpo JSON ou reproduzir solicitações.
Os comandos abaixo usam --set stream_large_bodies sem sinal ou valor de igual para redefinir esta configuração opcional para Nonee desabilitar explicitamente a retenção de corpo transmitido. O complemento rejeita a ativação de um limite de streaming global posteriormente. Remova outros complementos de streaming/reescrita de solicitação desta sessão dedicada e resolva quaisquer erros de inicialização antes de colocar uma chave no cliente. O proxy não é um limite de credencial fechado com falha: primeiro valide a rota com uma chave fictícia.
Windows: exemplo do Visual Studio
Instale o pacote nativo oficial do Windows em Downloads do mitmproxy. Reabra o PowerShell e verifique mitmweb --version. Não instale dentro do WSL para este exemplo de processo do Windows.
Crie e confie na CA local desta instalação
Comece uma vez na mesma conta do Windows que executará o proxy:
mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1
Após a inicialização, pare com Ctrl+C. mitmproxy cria sua CA em %USERPROFILE%\.mitmproxy. Prefiro Usuário atual confiança para um aplicativo em execução enquanto você:
$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.' }
Confie apenas na CA gerada pela sua própria instalação. mitmproxy-ca-cert.cer é o certificado público; mitmproxy-ca.pem também contém a chave privada e deve permanecer privada. Reinicie o Visual Studio após alterar a confiança.
Somente quando um aplicativo aprovado precisar especificamente Máquina local confiança, use um PowerShell elevado e certutil -addstore Root "$ca" sem -user. Isso confia na CA em toda a máquina, é uma mudança de segurança mais ampla e requer a remoção do armazenamento de máquina correspondente abaixo. Elevação sob um diferente a conta do administrador pode usar um perfil e uma CA diferentes; mantenha a configuração da conta, do certificado e do proxy consistente.
Capture apenas o processo e o host pretendidos
Execute o PowerShell nativo como administrador quando exigido pelas permissões de captura do Windows, usando a mesma conta/perfil. Inicie o Visual Studio primeiro. Este exemplo tem como alvo o nome do 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/'
Não deve haver espaços após o backtick de continuação de linha do PowerShell. A regra ancorada corresponde apenas à origem HTTPS especificada, incluindo uma porta explícita 443; um nome de host de provedor que ocorre dentro de uma consulta ou outro nome de host não é reescrito. A lista de permissões de host evita a descriptografia de destinos não relacionados do processo selecionado. lazy mais upstream_cert=false evita uma conexão desnecessária de detecção de certificado com o provedor original. A verificação TLS do upstream real ainda está habilitada.
Visual Studio é não Código VS. Uma extensão pode enviar solicitações por meio de um ServiceHub, servidor de idioma ou processo auxiliar separado, em vez de devenv. Identifique o processo real de propriedade da rede antes de ampliar a captura. Para inspecionar instâncias do Visual Studio:
Get-Process -Name devenv | Select-Object Id, ProcessName, Path
Substituir local:devenv com local:12345 usando o PID real ou uma lista separada por vírgulas de PIDs explicitamente identificados. Os PIDs mudam após as reinicializações. Não use $PID para uma variável personalizada do PowerShell; refere-se ao próprio processo do PowerShell. Não mude para máquina inteira --mode local apenas para fazer aparecer uma solicitação ausente.
Linux: o mesmo mapeamento com escopo
Instale uma versão oficial atual do mitmproxy e verifique mitmweb --version e uname -r. A Captura Local usa eBPF; o nível de suporte oficial é Linux 6.8. Precisa de um ajudante privilegiado iniciado sudo. Correr mitmweb como seu usuário comum com --mode local:... na linha de comando para solicitar esse privilégio; evite mudar todo o proxy para root e usar acidentalmente /root/.mitmproxy.
Primeiro inicialize a CA em sua conta normal e depois pare com Ctrl+C:
mitmweb --listen-host 127.0.0.1 --web-host 127.0.0.1
Prefira o mecanismo de CA personalizado documentado do aplicativo. Sobre Ubuntu/Debian, os aplicativos que usam o armazenamento confiável do sistema podem usar esta instalação opcional em todo o 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
Reinicie o cliente. Um armazenamento confiável privado de Java/Nó/navegador ou um aplicativo confinado pode precisar de sua própria configuração de confiança documentada; importar para o armazenamento do sistema operacional não garante que todos os clientes confiem nele. Outras distribuições usam seus próprios procedimentos de armazenamento de CA.
Para um processo local do VS Code denominado code, o mapeamento é:
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/'
Como no Windows, use o processo/PID de produção de solicitação real, não necessariamente a janela do editor. Inspecionar ps -eo pid,comm,args e substitua local:12345 conforme necessário. A correspondência de nomes do Linux é limitada aos primeiros 16 caracteres. A captura local em WSL não é compatível e os contêineres precisam de rede de host para esse modo. O tráfego de um host de extensão SSH/remota deve ser configurado na máquina onde esse processo é executado, não apenas em seu desktop.
Streaming, caminhos e outros provedores
O complemento somente resposta encaminha respostas HTTP sem esperar pela resposta completa, o que é importante para a entrega do token SSE. Os corpos da solicitação permanecem em buffer até map_remote mudou o destino. Os órgãos de streaming não são retidos para inspeção por padrão; cabeçalhos e status permanecem úteis. Não habilite a retenção de corpo ou a exportação de fluxo apenas para solucionar problemas de uma chave. Esta configuração não altera o JSON do cliente stream sinalizador e não pode fazer um stream de provedor que não seja de streaming.
O mapeamento padrão preserva os caminhos. Um cliente enviando /chat/completions sem /v1 ainda enviará esse caminho para o Model Gate e poderá receber 404. Somente para uma API de origem cujos caminhos exigem essa normalização, substitua o map_remote valor com:
map_remote=|^https://api\.deepseek\.com(?::443)?/(?:v1/)?|https://api.model-gate.com/v1/
Isto adiciona deliberadamente um /v1/ prefixo, preservando um existente, o caminho restante e a consulta. É uma variante separada de mudança de caminho, não o exemplo apenas de origem. Verifique o endpoint resultante antes de enviar um prompt real.
Para um provedor diferente, substitua o nome exato do host de origem em ambos allow-hosts e map_remote, escape dos pontos regex e escolha a origem/caminho de destino correto. Mantenha a partida ancorada com ^https:// e um limite de nome de host; nunca use uma substituição ampla de substring. Complementos salvos existentes ou regras de reescrita podem alterar o resultado, portanto, inspecione a configuração do mitmproxy antes de testar.
Aceitação e solução de problemas
Primeiro teste o roteamento com uma credencial fictícia e um prompt não sensível; é esperada uma falha de autenticação no destino pretendido. Somente após a confirmação do destino, faça um pedido deliberadamente pequeno com uma chave limitada dedicada; a inferência pode ser faturável. No mitmweb, verifique se o destino é o host da API Model Gate pretendido, se o caminho é compatível, se o ID/alias do modelo existe e se o status HTTP foi bem-sucedido. Verifique o histórico de solicitações do Model Gate e confirme se o texto transmitido chega progressivamente. Não publique um cabeçalho de autorização ou uma exportação de fluxo como prova.
Nenhuma solicitação capturada. O auxiliar/PID real, privilégios de captura, execução local versus remota, nome do host de origem e suporte ao kernel.
Falha no certificado TLS. Corrigir CA/perfil/loja e reinicialização do cliente. A fixação de certificado é uma limitação de compatibilidade e não um motivo para desativar a verificação.
401. O cliente deve usar uma chave Model Gate para a conta/domínio API correspondente; map_remote não troca credenciais.
404. Inspecione o caminho real; mapeamento somente de origem não adiciona /v1.
400 ou messages.0 / system erro. Verifique a compatibilidade do protocolo de solicitação. Uma reescrita de origem não traduz funções de mensagens ou outros campos JSON.
Modelo indisponível. Use um ID canônico habilitado ou um alias existente; mapeamento não renomeia model.
O streaming chega de uma só vez. Verifique se o complemento somente resposta foi carregado com sucesso, o cliente stream valor e suporte real do provedor. Não habilite o streaming de solicitação global.
Pare e remova a confiança
Antes de interromper a interceptação, feche o cliente ou remova a chave Model Gate de sua configuração de provedor original. Caso contrário, sua próxima solicitação direta poderá enviar essa chave ao provedor original. Não presuma que a interrupção do proxy falhará. Pare o mitmweb com Ctrl+C e restaure as configurações normais de endpoint/chave do cliente.
Para as janelas Usuário atual import acima, remova apenas o certificado exato desta instalação:
$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.' }
Para o opcional Máquina local importar, use um shell elevado e certutil -delstore Root $cert.Thumbprint em vez de. Mantenha o arquivo CA público até identificar e remover o certificado confiável correspondente; não exclua raízes confiáveis não relacionadas por nome.
Para a importação de todo o sistema Ubuntu/Debian acima:
sudo rm -- /usr/local/share/ca-certificates/model-gate-local-mitmproxy.crt
sudo update-ca-certificates --fresh
Remova também qualquer configuração de CA específica do aplicativo. Reinicie os clientes. Exclua artefatos confidenciais capturados e gire a chave Model Gate dedicada se ela tiver sido exposta ou enviada para um destino não intencional. Essas etapas da estação de trabalho não exigem alteração do nginx, armazenamento confiável do servidor, produção .env arquivos ou política TLS do Model Gate.
Referências oficiais
Revisado em 08/09/2026. Confirme as opções em relação ao seu instalado mitmweb --options; a captura do cliente e o comportamento de confiança ainda exigem testes em sua estação de trabalho.
- Modos e limitações de captura local mitmproxy
- mapeamento e streaming de URL mitmproxy
- exemplo de complemento de streaming de resposta mitmproxy
- implementação do gancho de solicitação mitmproxy map_remote
- opções de mitmproxy
- certificados mitmproxy CA e fixação
- destino e autoridade da solicitação HTTP mitmproxy
- Certificado Microsoft
- Instalação e remoção do Ubuntu CA