Charles Proxy é um servidor proxy multiplataforma para depuração de tráfego HTTP/HTTPS, usado por desenvolvedores para interceptar, visualizar e modificar requisições de rede. De acordo com Karl von Randow, criador da ferramenta (2025), Charles é usado em mais de 50.000 empresas em todo o mundo desde 2004. O proxy suporta interceptação de tráfego de dispositivos móveis via WiFi, proxy HTTPS com instalação de certificado raiz e um amplo conjunto de ferramentas para análise de API.
Principais pontos
Charles Proxy é um proxy HTTP e monitor HTTP que atua como intermediário entre o cliente e o servidor. Todas as requisições e respostas passam pelo Charles, permitindo visualizar seu conteúdo, analisar sua estrutura, modificar dados em tempo real e simular várias condições de rede. Está disponível para Windows, macOS e Linux.
Charles Proxy foi criado em 2004 por Karl von Randow e continua sendo uma das ferramentas mais populares para depuração de tráfego de rede. Ao contrário das alternativas gratuitas, Charles oferece uma licença paga com período de teste de 30 dias. A ferramenta se posiciona como uma solução profissional para desenvolvedores de aplicativos móveis, desenvolvedores web e engenheiros de QA que precisam de controle total sobre as comunicações HTTP.
Charles funciona como um proxy de sistema no computador e pode interceptar tráfego de qualquer dispositivo na mesma rede: Android, iOS, simuladores, emuladores, navegadores web e dispositivos IoT. Para interceptar HTTPS, é necessário instalar o certificado raiz do Charles em cada dispositivo. O tráfego é suportado em HTTP/1.1 e HTTP/2 (parcialmente). HTTP/3 (QUIC) não é suportado no nível de interceptação.
Charles funciona pelo princípio de um proxy MITM (Man-in-the-Middle): quando um cliente envia uma requisição através do Charles, a ferramenta intercepta a requisição, a encaminha para o servidor de destino, recebe a resposta e a devolve ao cliente. Todo o tráfego passa pelo Charles, permitindo que seja analisado e modificado.
Ao ser iniciado, Charles cria um proxy HTTP local na porta 8888 (padrão). O sistema operacional ou aplicativo é configurado para usar este proxy. Todas as requisições HTTP são enviadas primeiro para o Charles, que então atua como um cliente completo para o servidor de destino. Para HTTPS, Charles usa sua própria técnica de proxy SSL: ele gera um certificado instantaneamente para cada domínio, assinado pelo certificado raiz do Charles. Se o certificado raiz estiver instalado no dispositivo como confiável, Charles pode descriptografar e visualizar o tráfego HTTPS.
Charles suporta dois modos: Proxy(servidor proxy clássico) e SOCKS Proxy(para tráfego UDP e TCP). Para desenvolvimento web, usa-se o proxy HTTP padrão. Para dispositivos móveis — configurar WiFi Proxy no dispositivo informando o endereço IP do computador onde o Charles está sendo executado. macOS suporta configuração automática de proxy para o simulador iOS.
<!-- Configuração do network_security_config.xml para Android com suporte ao Charles -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Confiar no certificado do Charles na compilação Debug -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy fornece um conjunto de ferramentas profissionais para analisar e modificar tráfego que vão muito além da simples interceptação de requisições.
A ferramenta Rewrite permite alterar automaticamente certas partes de requisições ou respostas: cabeçalhos, parâmetros de URL, corpo da resposta. Por exemplo, você pode substituir o cabeçalho User-Agent por um valor de outro dispositivo ou remover determinados cookies. Breakpoints funcionam como um depurador: a requisição é interrompida em um estágio selecionado (antes de enviar ou antes de receber), e o desenvolvedor pode alterar manualmente seu conteúdo antes que prossiga. Isso é útil para testar o tratamento de respostas de erro ou estados não padrão.
Map Local permite substituir um recurso de rede (CSS, JS, JSON) por um arquivo local do disco. Isso é indispensável no desenvolvimento frontend: você pode modificar CSS/JS e ver o resultado imediatamente sem implantar em um servidor. Map Remote redireciona requisições de uma URL para outra — por exemplo, do servidor de produção para staging para testes. Ambas as ferramentas funcionam com padrões de URL que suportam curingas.
A ferramenta Throttle permite simular vários tipos de conexões de rede usando perfis predefinidos: 3G, EDGE, GPRS, DSL, WiFi. Você pode configurar limite de velocidade (download/upload), latência, perda de pacotes e estabilidade. Isso é crítico para testar o comportamento do aplicativo em conexões lentas ou instáveis — tratamento adequado de timeouts, novas tentativas, modo offline.
| Perfil | Download | Upload | Latência | Cenário típico |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Teste com sinal móvel fraco |
| EDGE | 130 kbps | 50 kbps | 400 ms | Conexão extremamente lenta |
| GPRS | 50 kbps | 20 kbps | 500 ms | Conexão mínima possível |
| DSL | 2 Mbps | 256 kbps | 50 ms | Conexão doméstica com fio |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | Conexão WiFi boa |
Charles pode salvar automaticamente sessões de tráfego em arquivos .chls, permitindo analisá-los posteriormente ou compartilhar com colegas. O Recording Control permite configurar flexivelmente qual tráfego salvar: por domínio, tipo de conteúdo ou código de status. Isso é conveniente para monitoramento de API de longo prazo.
Para depurar o tráfego de aplicativos móveis, o Charles é configurado como um WiFi Proxy: todos os dispositivos na mesma rede do computador podem rotear tráfego através do Charles. A configuração correta de HTTPS requer a instalação do certificado do Charles no dispositivo móvel.
Para Android: abrir Settings → WiFi → Advanced → Proxy, selecionar Manual e informar o endereço IP do computador com a porta 8888. Em seguida, abrir um navegador no dispositivo e acessar http://chls.pro/ssl para baixar o certificado do Charles. No Android 7+ (API 24+), é necessário network_security_config.xml para confiar em certificados de usuário em compilações Debug — caso contrário, o aplicativo pode não rotear tráfego através do Charles.
Para iOS: Settings → WiFi → configurar proxy com IP e porta 8888. Em seguida, Safari → http://chls.pro/ssl → instalar o perfil de certificado. No iOS 10.3+, é necessário ativar adicionalmente a confiança do certificado: Settings → General → About → Certificate Trust Settings → ativar Charles Proxy. iOS é mais rigoroso com certificados: alguns aplicativos podem usar SSL Pinning, bloqueando o tráfego através do Charles mesmo com um certificado confiável.
Se o aplicativo usa SSL Pinning(fixação de certificado do servidor), o proxy padrão através do Charles não funcionará — o aplicativo rejeitará o certificado do Charles. Soluções: desativar SSL Pinning em compilações Debug através das configurações do OkHttp ou URLSession, usar Frida para contornar o pinning em tempo de execução, ou usar Android Emulator com acesso root.
Charles Proxy resolve tarefas específicas de desenvolvimento e teste. Vamos ver os cenários mais comuns onde a ferramenta é indispensável.
O cenário mais comum — verificar a correção das requisições de API. Charles mostra a URL exata da requisição, cabeçalhos, corpo e parâmetros. Se o servidor retornar uma resposta inesperada, você vê imediatamente: estrutura JSON, código de erro, cabeçalhos de resposta. Isso permite distinguir erros do cliente de erros do servidor sem logs de ambos os lados.
Usando os perfis Throttle, você pode testar como o aplicativo se comporta com baixa velocidade de conexão: se um indicador de carregamento é exibido, se os timeouts são tratados corretamente, se a UI congela na perda de conexão. É especialmente importante testar o cache — se os dados já foram carregados, o aplicativo deve mostrá-los do cache em vez de entrar em carregamento infinito.
Usando Breakpoints, você pode modificar a resposta do servidor antes que ela seja enviada ao aplicativo. Por exemplo, retornar um array vazio em vez de dados, alterar o código de status para 500, adicionar um novo campo ao JSON. Isso permite testar o tratamento de casos limite sem modificar o código do servidor — um dos usos mais poderosos do Charles no desenvolvimento móvel.
Perguntas frequentes
Charles Proxy é um produto comercial com período de teste de 30 dias. Após o término do período de teste, o programa continua funcionando com uma pausa de 30 minutos a cada inicialização. O custo da licença é de $50 por cópia. Existem alternativas gratuitas como Proxyman (macOS) e mitmproxy (multiplataforma).
Sim, o simulador iOS usa automaticamente o proxy de sistema do macOS. Basta iniciar o Charles e ativar o proxy SSL — todo o tráfego do simulador será interceptado. A configuração do certificado para o simulador acontece automaticamente; você só precisa confiar no certificado do Charles no chaveiro do macOS.
Principais diferenças: Charles é multiplataforma (Windows, macOS, Linux), Proxyman é apenas para macOS e iOS. Charles tem um conjunto mais amplo de ferramentas (Rewrite, Map Local, Repeat, Auto Save) mas é pago. Proxyman é gratuito para funcionalidades básicas, com interface moderna e integração nativa com o simulador iOS.
Charles adiciona latência quando o tráfego passa pelo proxy, especialmente com proxy SSL ativo (descriptografia/criptografia). Em computadores modernos, o atraso é de 5 a 15 milissegundos por requisição. Para testes de desempenho, recomenda-se desativar o proxy SSL para conteúdo estático (CSS, JS, imagens) através do Recording Control.
Charles suporta exportação para formatos: .chls(nativo, para reabrir no Charles), HAR(HTTP Archive, abre em navegadores e outras ferramentas), CSV(para processar em Excel ou planilhas), Trace(para exportar uma requisição específica em formato compatível com curl). Exportação através do menu File → Export Session.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também