Charles Proxy è un server proxy multipiattaforma per il debug del traffico HTTP/HTTPS, utilizzato dagli sviluppatori per intercettare, visualizzare e modificare le richieste di rete. Secondo Karl von Randow, creatore dello strumento (2025), Charles è utilizzato in più di 50.000 aziende in tutto il mondo dal 2004. Il proxy supporta l'intercettazione del traffico da dispositivi mobili tramite WiFi, proxy HTTPS con installazione del certificato radice e un'ampia gamma di strumenti per l'analisi delle API.
Punti chiave
Charles Proxy è un proxy HTTP e monitor HTTP che funge da intermediario tra il client e il server. Tutte le richieste e le risposte passano attraverso Charles, consentendo di visualizzarne il contenuto, analizzarne la struttura, modificare i dati in tempo reale e simulare varie condizioni di rete. È disponibile per Windows, macOS e Linux.
Charles Proxy è stato creato nel 2004 da Karl von Randow e rimane uno degli strumenti più popolari per il debug del traffico di rete. A differenza delle alternative gratuite, Charles offre una licenza a pagamento con un periodo di prova di 30 giorni. Lo strumento si posiziona come una soluzione professionale per sviluppatori di app mobili, sviluppatori web e ingegneri QA che necessitano del controllo completo sulle comunicazioni HTTP.
Charles funziona come un proxy di sistema sul computer e può intercettare il traffico da qualsiasi dispositivo sulla stessa rete: Android, iOS, simulatori, emulatori, browser web e dispositivi IoT. Per intercettare HTTPS, è necessario installare il certificato radice di Charles su ciascun dispositivo. Il traffico è supportato su HTTP/1.1 e HTTP/2 (parzialmente). HTTP/3 (QUIC) non è supportato a livello di intercettazione.
Charles funziona secondo il principio di un proxy MITM (Man-in-the-Middle): quando un client invia una richiesta attraverso Charles, lo strumento intercetta la richiesta, la inoltra al server di destinazione, riceve la risposta e la restituisce al client. Tutto il traffico passa attraverso Charles, consentendone l'analisi e la modifica.
All'avvio, Charles crea un proxy HTTP locale sulla porta 8888 (predefinita). Il sistema operativo o l'applicazione viene configurato per utilizzare questo proxy. Tutte le richieste HTTP vengono inviate prima a Charles, che poi agisce come un client completo verso il server di destinazione. Per HTTPS, Charles utilizza la propria tecnica di proxy SSL: genera un certificato al volo per ogni dominio, firmato dal certificato radice di Charles. Se il certificato radice è installato sul dispositivo come attendibile, Charles può decrittografare e visualizzare il traffico HTTPS.
Charles supporta due modalità: Proxy(server proxy classico) e SOCKS Proxy(per traffico UDP e TCP). Per lo sviluppo web, si utilizza il proxy HTTP standard. Per i dispositivi mobili — configurare il WiFi Proxy sul dispositivo indicando l'indirizzo IP del computer su cui è in esecuzione Charles. macOS supporta la configurazione automatica del proxy per il simulatore iOS.
<!-- Configurazione di network_security_config.xml per Android con supporto Charles -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Fidarsi del certificato di Charles nella build Debug -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy fornisce un insieme di strumenti professionali per analizzare e modificare il traffico che vanno ben oltre la semplice intercettazione delle richieste.
Lo strumento Rewrite consente di modificare automaticamente determinate parti di richieste o risposte: intestazioni, parametri URL, corpo della risposta. Ad esempio, è possibile sostituire l'intestazione User-Agent con un valore di un altro dispositivo o rimuovere determinati cookie. Breakpoints funziona come un debugger: la richiesta si ferma in una fase selezionata (prima dell'invio o prima della ricezione) e lo sviluppatore può modificarne manualmente il contenuto prima che proceda. Questo è utile per testare la gestione di risposte di errore o stati non standard.
Map Local consente di sostituire una risorsa di rete (CSS, JS, JSON) con un file locale dal disco. Questo è indispensabile nello sviluppo frontend: è possibile modificare CSS/JS e vedere il risultato immediatamente senza distribuire su un server. Map Remote reindirizza le richieste da un URL a un altro — ad esempio, dal server di produzione allo staging per i test. Entrambi gli strumenti funzionano con modelli URL che supportano caratteri jolly.
Lo strumento Throttle consente di simulare vari tipi di connessioni di rete utilizzando profili preimpostati: 3G, EDGE, GPRS, DSL, WiFi. È possibile configurare il limite di velocità (download/upload), la latenza, la perdita di pacchetti e la stabilità. Questo è fondamentale per testare il comportamento dell'app in connessioni lente o instabili — gestione corretta dei timeout, logica di ripetizione, modalità offline.
| Profilo | Download | Upload | Latenza | Scenario tipico |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Test con segnale mobile debole |
| EDGE | 130 kbps | 50 kbps | 400 ms | Connessione estremamente lenta |
| GPRS | 50 kbps | 20 kbps | 500 ms | Connessione minima possibile |
| DSL | 2 Mbps | 256 kbps | 50 ms | Connessione domestica cablata |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | Buona connessione WiFi |
Charles può salvare automaticamente le sessioni di traffico in file .chls, consentendo di analizzarle in seguito o condividerle con i colleghi. Recording Control consente di configurare flessibilmente quale traffico salvare: per dominio, tipo di contenuto o codice di stato. Questo è comodo per il monitoraggio API a lungo termine.
Per il debug del traffico delle app mobili, Charles viene configurato come un WiFi Proxy: tutti i dispositivi sulla stessa rete del computer possono instradare il traffico attraverso Charles. La corretta configurazione HTTPS richiede l'installazione del certificato di Charles sul dispositivo mobile.
Per Android: aprire Settings → WiFi → Advanced → Proxy, selezionare Manual e inserire l'indirizzo IP del computer con la porta 8888. Quindi aprire un browser sul dispositivo e andare su http://chls.pro/ssl per scaricare il certificato di Charles. Su Android 7+ (API 24+), è necessario network_security_config.xml per fidarsi dei certificati utente nelle build Debug — altrimenti, l'app potrebbe non instradare il traffico attraverso Charles.
Per iOS: Settings → WiFi → configurare il proxy con IP e porta 8888. Quindi Safari → http://chls.pro/ssl → installare il profilo del certificato. Su iOS 10.3+, è necessario attivare ulteriormente la fiducia del certificato: Settings → General → About → Certificate Trust Settings → attivare Charles Proxy. iOS è più severo riguardo ai certificati: alcune app potrebbero utilizzare SSL Pinning, bloccando il traffico attraverso Charles anche con un certificato attendibile.
Se l'app utilizza SSL Pinning(fissaggio del certificato del server), il proxy standard attraverso Charles non funzionerà — l'app rifiuterà il certificato di Charles. Soluzioni: disabilitare SSL Pinning nelle build Debug tramite le impostazioni di OkHttp o URLSession, utilizzare Frida per bypassare il pinning in runtime, o utilizzare Android Emulator con accesso root.
Charles Proxy risolve compiti specifici di sviluppo e test. Vediamo gli scenari più comuni in cui lo strumento è indispensabile.
Lo scenario più comune — verificare la correttezza delle richieste API. Charles mostra l'URL esatto della richiesta, le intestazioni, il corpo e i parametri. Se il server restituisce una risposta inaspettata, si vede immediatamente: struttura JSON, codice di errore, intestazioni di risposta. Ciò consente di distinguere gli errori del client dagli errori del server senza log da entrambe le parti.
Utilizzando i profili Throttle, è possibile testare come si comporta l'app con velocità di connessione bassa: se viene visualizzato un indicatore di caricamento, se i timeout vengono gestiti correttamente, se l'UI si blocca in caso di perdita di connessione. È particolarmente importante testare la memorizzazione nella cache — se i dati sono già stati caricati, l'app dovrebbe mostrarli dalla cache anziché entrare in uno stato di caricamento infinito.
Utilizzando Breakpoints, è possibile modificare la risposta del server prima che venga inviata all'app. Ad esempio, restituire un array vuoto invece dei dati, cambiare il codice di stato in 500, aggiungere un nuovo campo al JSON. Ciò consente di testare la gestione dei casi limite senza modificare il codice del server — uno degli usi più potenti di Charles nello sviluppo mobile.
Domande frequenti
Charles Proxy è un prodotto commerciale con un periodo di prova di 30 giorni. Dopo la fine del periodo di prova, il programma continua a funzionare con una pausa di 30 minuti a ogni avvio. Il costo della licenza è di $50 per copia. Esistono alternative gratuite come Proxyman (macOS) e mitmproxy (multipiattaforma).
Sì, il simulatore iOS utilizza automaticamente il proxy di sistema di macOS. Basta avviare Charles e attivare il proxy SSL — tutto il traffico del simulatore verrà intercettato. La configurazione del certificato per il simulatore avviene automaticamente; è sufficiente fidarsi del certificato di Charles nel portachiavi di macOS.
Principali differenze: Charles è multipiattaforma (Windows, macOS, Linux), Proxyman è solo per macOS e iOS. Charles ha un set di strumenti più ampio (Rewrite, Map Local, Repeat, Auto Save) ma è a pagamento. Proxyman è gratuito per le funzionalità di base, con interfaccia moderna e integrazione nativa con il simulatore iOS.
Charles aggiunge latenza quando il traffico passa attraverso il proxy, specialmente con proxy SSL attivo (decifratura/cifratura). Sui computer moderni, il ritardo è di 5–15 millisecondi per richiesta. Per i test di prestazione, si consiglia di disabilitare il proxy SSL per i contenuti statici (CSS, JS, immagini) tramite Recording Control.
Charles supporta l'esportazione in formati: .chls(nativo, per riaprire in Charles), HAR(HTTP Archive, si apre nei browser e in altri strumenti), CSV(per l'elaborazione in Excel o fogli di calcolo), Trace(per esportare una richiesta specifica in formato compatibile con curl). Esportazione tramite il menu File → Export Session.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche