Charles Proxy — un server proxy cross-platform pentru depanarea traficului HTTP/HTTPS, folosit de developeri pentru a intercepta, vizualiza și modifica cererile de rețea. Conform Karl von Randow, creatorul instrumentului (2025), Charles este folosit în peste 50.000 de companii din întreaga lume din 2004. Proxy-ul suportă interceptarea traficului de pe dispozitive mobile prin WiFi, proxy HTTPS cu instalarea certificatului rădăcină și un set larg de instrumente pentru analiza API.
Puncte cheie
Charles Proxy — este un proxy HTTP și monitor HTTP care acționează ca intermediar între client și server. Toate cererile și răspunsurile trec prin Charles, permițând vizualizarea conținutului, analiza structurii, modificarea datelor în timp real și simularea diferitelor condiții de rețea. Disponibil pentru Windows, macOS și Linux.
Charles Proxy a fost creat în 2004 de Karl von Randow și rămâne unul dintre cele mai populare instrumente pentru depanarea traficului de rețea. Spre deosebire de alternativele gratuite, Charles oferă o licență plătită cu o perioadă de încercare de 30 de zile. Instrumentul este poziționat ca o soluție profesională pentru dezvoltatorii de aplicații mobile, web developeri și ingineri QA care au nevoie de control complet asupra comunicațiilor HTTP.
Charles funcționează ca proxy de sistem pe computer și poate intercepta trafic de pe orice dispozitive din aceeași rețea: Android, iOS, simulatoare, emulatoare, browsere web și dispozitive IoT. Pentru interceptarea HTTPS, trebuie să instalați certificatul rădăcină Charles pe fiecare dispozitiv. Traficul este suportat pe HTTP/1.1 și HTTP/2 (parțial). HTTP/3 (QUIC) nu este suportat la nivelul de interceptare.
Charles funcționează pe principiul proxy-ului MITM (Man-in-the-Middle): când un client trimite o cerere prin Charles, instrumentul interceptează această cerere, o redirecționează către serverul țintă, primește răspunsul și îl transmite înapoi clientului. Tot traficul trece prin Charles, permițând analiza și modificarea acestuia.
La pornire, Charles creează un proxy HTTP local pe portul 8888 (implicit). Sistemul de operare sau aplicația este configurată să utilizeze acest proxy. Toate cererile HTTP sunt trimise mai întâi la Charles, care acționează apoi ca un client complet pentru serverul țintă. Pentru HTTPS, Charles utilizează propria tehnică de SSL-proxy: generează un certificat din mers pentru fiecare domeniu, semnat de certificatul rădăcină Charles. Dacă certificatul rădăcină este instalat ca de încredere pe dispozitiv, Charles poate decripta și vizualiza traficul HTTPS.
Charles suportă două moduri: Proxy (server proxy clasic) și SOCKS Proxy (pentru trafic UDP și TCP). Pentru dezvoltarea web, se utilizează proxy-ul HTTP standard. Pentru dispozitive mobile — configurarea WiFi Proxy pe dispozitiv cu specificarea adresei IP a computerului pe care rulează Charles. MacOS suportă configurarea automată a proxy-ului pentru simulatorul iOS.
<!-- Configurarea network_security_config.xml pentru Android cu suport Charles -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Aveți încredere în certificatul Charles în construcția Debug -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy oferă un set de instrumente profesionale pentru analiza și modificarea traficului, care depășește cu mult simpla interceptare a cererilor.
Instrumentul Rewrite permite modificarea automată a anumitor părți ale cererilor sau răspunsurilor: antete, parametri URL, corpul răspunsului. De exemplu, puteți înlocui antetul User-Agent cu o valoare de pe alt dispozitiv sau elimina anumite cookie-uri. Breakpoints funcționează ca un debugger: cererea este oprită la etapa selectată (înainte de trimitere sau înainte de primire), iar dezvoltatorul poate modifica manual conținutul său înainte ca acesta să meargă mai departe. Acest lucru este util pentru testarea gestionării răspunsurilor eronate sau a stărilor non-standard.
Map Local permite înlocuirea unei resurse de rețea (CSS, JS, JSON) cu un fișier local de pe disc. Acest lucru este indispensabil în dezvoltarea frontend: puteți modifica CSS/JS și vedea imediat rezultatul fără a implementa pe server. Map Remote redirecționează cererile de la un URL la altul — de exemplu, de la serverul de producție la staging pentru testare. Ambele instrumente funcționează pe baza modelelor de URL cu suport pentru wildcards.
Instrumentul Throttle permite simularea diferitelor tipuri de conexiuni de rețea pe baza profilelor prestabilite: 3G, EDGE, GPRS, DSL, WiFi. Puteți configura limite de viteză (download/upload), latență, pierdere de pachete și stabilitate. Acest lucru este critic pentru testarea comportamentului aplicației în condiții de conexiune lentă sau instabilă — gestionarea corectă a timeout-urilor, reîncercări, mod offline.
| Profil | Download | Upload | Latență | Scenariu tipic |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Testare cu semnal mobil slab |
| EDGE | 130 kbps | 50 kbps | 400 ms | Conexiune extrem de lentă |
| GPRS | 50 kbps | 20 kbps | 500 ms | Conexiune minimă posibilă |
| DSL | 2 Mbps | 256 kbps | 50 ms | Conexiune prin cablu acasă |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | Conexiune WiFi bună |
Charles poate salva automat sesiunile de trafic în fișiere .chls, permițând analiza ulterioară sau partajarea cu colegii. Recording Control permite configurarea flexibilă a traficului care trebuie salvat: pe domenii, tipuri de conținut, coduri de stare. Acest lucru este convenabil pentru monitorizarea pe termen lung a API-ului.
Pentru depanarea traficului aplicațiilor mobile, Charles este configurat ca WiFi Proxy: toate dispozitivele din aceeași rețea cu computerul pot direcționa traficul prin Charles. Configurarea corectă HTTPS necesită instalarea certificatului Charles pe dispozitivul mobil.
Pentru Android: deschideți Settings → WiFi → Advanced → Proxy, selectați Manual și introduceți adresa IP a computerului cu portul 8888. Apoi deschideți browserul pe dispozitiv și accesați http://chls.pro/ssl pentru a descărca certificatul Charles. Pe Android 7+ (API 24+), este necesar network_security_config.xml pentru a avea încredere în certificatele de utilizator în build-ul Debug — altfel, aplicația poate să nu direcționeze traficul prin Charles.
Pentru iOS: Settings → WiFi → configurați proxy-ul pe IP și portul 8888. Apoi Safari → http://chls.pro/ssl → instalați profilul de certificat. Pe iOS 10.3+, trebuie să activați încrederea în certificat: Settings → General → About → Certificate Trust Settings → activați Charles Proxy. iOS este mai strict cu certificatele: unele aplicații pot utiliza SSL Pinning, blocând traficul prin Charles chiar și cu un certificat de încredere.
Dacă aplicația utilizează SSL Pinning (fixarea certificatului serverului), proxy-ul standard prin Charles nu va funcționa — aplicația va respinge certificatul Charles. Soluții: dezactivați SSL Pinning în build-ul Debug prin setările OkHttp sau URLSession, utilizați Frida pentru a ocoli pinning-ul în runtime, sau folosiți Android Emulator cu acces root.
Charles Proxy rezolvă sarcini specifice de dezvoltare și testare. Să analizăm cele mai frecvente scenarii în care instrumentul este indispensabil.
Cel mai frecvent scenariu — verificarea corectitudinii cererilor API. Charles arată URL-ul exact al cererii, antetele, corpul, parametrii. Dacă serverul returnează un răspuns neașteptat, sunt imediat vizibile: structura JSON, codul de eroare, antetele răspunsului. Acest lucru permite distingerea erorilor de pe client de erorile de pe server fără loguri din ambele părți.
Folosind profilele Throttle, puteți testa cum se comportă aplicația la viteză mică de conexiune: dacă este afișat indicatorul de încărcare, dacă timeout-ul este gestionat corect, dacă UI se blochează la pierderea conexiunii. Testarea cache-ului este deosebit de importantă — dacă datele sunt deja încărcate, aplicația ar trebui să le arate din cache, nu să intre în încărcare infinită.
Cu ajutorul Breakpoints, puteți modifica răspunsul serverului înainte ca acesta să fie trimis aplicației. De exemplu, returnați un array gol în loc de date, schimbați codul de stare la 500, adăugați un câmp nou în JSON. Acest lucru permite testarea gestionării cazurilor limită fără modificarea codului serverului — una dintre cele mai puternice aplicații ale Charles în dezvoltarea mobilă.
Întrebări frecvente
Charles Proxy este un produs comercial cu o perioadă de încercare de 30 de zile. După expirarea perioadei de încercare, programul continuă să funcționeze cu o pauză de 30 de minute la fiecare lansare. Costul licenței este de 50$ per copie. Există alternative gratuite, precum Proxyman (macOS) și mitmproxy (cross-platform).
Da, simulatorul iOS utilizează automat proxy-ul de sistem macOS. Este suficient să lansați Charles și să activați SSL-proxy — tot traficul simulatorului va fi interceptat. Configurarea certificatului pentru simulator are loc automat, fiind necesar doar să aveți încredere în certificatul Charles în keychain-ul macOS.
Principalele diferențe: Charles este cross-platform (Windows, macOS, Linux), Proxyman — doar macOS și iOS. Charles are un set mai larg de instrumente (Rewrite, Map Local, Repeat, Auto Save), dar este plătit. Proxyman este gratuit pentru funcționalitatea de bază, cu o interfață modernă și integrare nativă cu simulatorul iOS.
Charles adaugă latență la trecerea traficului prin proxy, în special la SSL-proxy activ (decriptare/criptare). Pe calculatoarele moderne, latența este de 5–15 milisecunde per cerere. Pentru testarea performanței, se recomandă dezactivarea SSL-proxy pentru resursele statice (CSS, JS, imagini) prin Recording Control.
Charles suportă exportul în formatele: .chls (nativ, pentru redeschidere în Charles), HAR (HTTP Archive, se deschide în browsere și alte instrumente), CSV (pentru procesare în Excel sau foi de calcul), Trace (pentru exportul unei cereri specifice în format compatibil cu curl). Exportul se face prin meniul File → Export Session.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și