Charles Proxy is een cross-platform proxyserver voor het debuggen van HTTP/HTTPS-verkeer, gebruikt door ontwikkelaars om netwerkverzoeken te onderscheppen, bekijken en wijzigen. Volgens Karl von Randow, maker van de tool (2025), wordt Charles sinds 2004 gebruikt in meer dan 50.000 bedrijven wereldwijd. Proxy ondersteunt het onderscheppen van verkeer van mobiele apparaten via WiFi, HTTPS-proxy met installatie van het rootcertificaat en een breed scala aan tools voor API-analyse.
Kernpunten
Charles Proxy is een HTTP-proxy en HTTP-monitor die fungeert als tussenpersoon tussen client en server. Alle verzoeken en antwoorden passeren Charles, waardoor u de inhoud kunt bekijken, de structuur kunt analyseren, gegevens in realtime kunt wijzigen en verschillende netwerkomstandigheden kunt simuleren. Beschikbaar voor Windows, macOS en Linux.
Charles Proxy is gemaakt in 2004 door Karl von Randow en blijft een van de populairste tools voor het debuggen van netwerkverkeer. In tegenstelling tot gratis alternatieven biedt Charles een betaalde licentie met een proefperiode van 30 dagen. De tool wordt gepositioneerd als een professionele oplossing voor mobiele app-ontwikkelaars, webontwikkelaars en QA-ingenieurs die volledige controle over HTTP-communicatie nodig hebben.
Charles werkt als een systeemproxy op de computer en kan verkeer onderscheppen van alle apparaten in hetzelfde netwerk: Android, iOS, simulators, emulators, webbrowsers en IoT-apparaten. Voor HTTPS-onderschepping moet u het Charles-rootcertificaat op elk apparaat installeren. Verkeer wordt ondersteund op HTTP/1.1 en HTTP/2 (gedeeltelijk). HTTP/3 (QUIC) wordt niet ondersteund op onderscheppingsniveau.
Charles werkt volgens het MITM (Man-in-the-Middle)-proxyprincipe: wanneer een client een verzoek via Charles verzendt, onderschept de tool dit verzoek, stuurt het door naar de doelserver, ontvangt het antwoord en geeft het terug aan de client. Al het verkeer passeert Charles, wat analyse en wijziging mogelijk maakt.
Bij het opstarten maakt Charles een lokale HTTP-proxy op poort 8888 (standaard). Het besturingssysteem of de applicatie wordt geconfigureerd om deze proxy te gebruiken. Alle HTTP-verzoeken worden eerst naar Charles gestuurd, die vervolgens als volledige client voor de doelserver fungeert. Voor HTTPS gebruikt Charles zijn eigen SSL-proxyingtechniek: het genereert ter plaatse een certificaat voor elk domein, ondertekend door het Charles-rootcertificaat. Als het rootcertificaat als vertrouwd op het apparaat is geïnstalleerd, kan Charles HTTPS-verkeer ontsleutelen en bekijken.
Charles ondersteunt twee modi: Proxy (klassieke proxyserver) en SOCKS Proxy (voor UDP- en TCP-verkeer). Voor webontwikkeling wordt de standaard HTTP-proxy gebruikt. Voor mobiele apparaten — WiFi Proxy-configuratie op het apparaat met opgave van het IP-adres van de computer waarop Charles draait. MacOS ondersteunt automatische proxyconfiguratie voor de iOS-simulator.
<!-- Configuratie van network_security_config.xml voor Android met Charles-ondersteuning -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Vertrouw het Charles-certificaat in Debug-build -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy biedt een set professionele tools voor verkeersanalyse en -wijziging die ver verder gaan dan eenvoudige verzoekonderschepping.
De Rewrite-tool maakt automatische wijziging van bepaalde delen van verzoeken of antwoorden mogelijk: headers, URL-parameters, antwoordbody. U kunt bijvoorbeeld de User-Agent-header vervangen door een waarde van een ander apparaat of specifieke cookies verwijderen. Breakpoints werken als een debugger: het verzoek wordt gepauzeerd in een geselecteerd stadium (vóór verzenden of vóór ontvangen) en de ontwikkelaar kan de inhoud handmatig wijzigen voordat het verder gaat. Dit is handig voor het testen van foutafhandeling of niet-standaard statussen.
Map Local maakt het mogelijk een netwerkbron (CSS, JS, JSON) te vervangen door een lokaal bestand op schijf. Dit is onmisbaar bij frontend-ontwikkeling: u kunt CSS/JS wijzigen en direct het resultaat zien zonder implementatie op een server. Map Remote verwijst verzoeken van de ene URL naar de andere — bijvoorbeeld van de productieserver naar staging voor testen. Beide tools werken met URL-patronen met ondersteuning voor wildcards.
De Throttle-tool simuleert verschillende soorten netwerkverbindingen met behulp van vooraf ingestelde profielen: 3G, EDGE, GPRS, DSL, WiFi. U kunt snelheidslimieten (download/upload), latentie, pakketverlies en stabiliteit configureren. Dit is cruciaal voor het testen van app-gedrag bij trage of onstabiele verbindingen — correcte afhandeling van time-outs, herhaalpogingen, offline modus.
| Profiel | Download | Upload | Latentie | Typisch scenario |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Testen met zwak mobiel signaal |
| EDGE | 130 kbps | 50 kbps | 400 ms | Extreem trage verbinding |
| GPRS | 50 kbps | 20 kbps | 500 ms | Minimaal mogelijke verbinding |
| DSL | 2 Mbps | 256 kbps | 50 ms | Thuis bekabelde verbinding |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | Goede WiFi-verbinding |
Charles kan verkeerssessies automatisch opslaan in .chls-bestanden, wat latere analyse of delen met collega's mogelijk maakt. Recording Control biedt flexibele configuratie van welk verkeer moet worden opgeslagen: per domein, inhoudstype, statuscode. Dit is handig voor langetermijnmonitoring van de API.
Voor het debuggen van mobiele app-verkeer wordt Charles geconfigureerd als een WiFi Proxy: alle apparaten in hetzelfde netwerk als de computer kunnen verkeer via Charles routeren. Correcte HTTPS-configuratie vereist installatie van het Charles-certificaat op het mobiele apparaat.
Voor Android: open Instellingen → WiFi → Geavanceerd → Proxy, selecteer Handmatig en voer het IP-adres van de computer met poort 8888 in. Open vervolgens de browser op het apparaat en ga naar http://chls.pro/ssl om het Charles-certificaat te downloaden. Op Android 7+ (API 24+) is network_security_config.xml vereist om gebruikerscertificaten te vertrouwen in Debug-builds — anders kan de app verkeer weigeren via Charles te routeren.
Voor iOS: Instellingen → WiFi → configureer proxy naar IP en poort 8888. Vervolgens Safari → http://chls.pro/ssl → installeer certificaatprofiel. Op iOS 10.3+ moet u certificaatvertrouwen inschakelen: Instellingen → Algemeen → Over → Certificaatvertrouwensinstellingen → schakel Charles Proxy in. iOS is strenger met certificaten: sommige apps kunnen SSL Pinning gebruiken, wat verkeer via Charles blokkeert, zelfs met een vertrouwd certificaat.
Als de app SSL Pinning (servercertificaat vastpinnen) gebruikt, werkt standaard proxy via Charles niet — de app wijst het Charles-certificaat af. Oplossingen: schakel SSL Pinning uit in Debug-builds via OkHttp- of URLSession-instellingen, gebruik Frida om pinning tijdens runtime te omzeilen, of gebruik Android Emulator met root-toegang.
Charles Proxy lost specifieke ontwikkel- en testtaken op. Laten we de meest voorkomende scenario's bekijken waarin de tool onmisbaar is.
Het meest voorkomende scenario — controleren van de juistheid van API-verzoeken. Charles toont de exacte URL van het verzoek, headers, body, parameters. Als de server een onverwacht antwoord retourneert, zijn direct zichtbaar: JSON-structuur, foutcode, antwoordheaders. Dit maakt het mogelijk om client-side fouten van server-side fouten te onderscheiden zonder logs van beide kanten.
Met Throttle-profielen kunt u testen hoe de app zich gedraagt bij lage verbindingssnelheid: of een laadindicator wordt weergegeven, of time-outs correct worden afgehandeld, of de UI vastloopt bij verbindingsverlies. Het testen van caching is bijzonder belangrijk — als gegevens al zijn geladen, moet de app deze uit de cache tonen in plaats van in oneindig laden te gaan.
Met Breakpoints kunt u het serverantwoord wijzigen voordat het naar de app wordt verzonden. Bijvoorbeeld een lege array retourneren in plaats van gegevens, de statuscode wijzigen naar 500, een nieuw veld toevoegen aan JSON. Dit maakt het testen van randgevalafhandeling mogelijk zonder servercode te wijzigen — een van de krachtigste toepassingen van Charles in mobiele ontwikkeling.
Veelgestelde vragen
Charles Proxy is een commercieel product met een proefperiode van 30 dagen. Na afloop van de proefperiode blijft het programma werken met een pauze van 30 minuten bij elke start. Licentiekosten zijn $50 per exemplaar. Er bestaan gratis alternatieven, zoals Proxyman (macOS) en mitmproxy (cross-platform).
Ja, de iOS-simulator gebruikt automatisch de macOS-systeemproxy. Start gewoon Charles en schakel SSL-proxy in — al het verkeer van de simulator wordt onderschept. Certificaatinstelling voor de simulator gebeurt automatisch; u hoeft alleen het Charles-certificaat te vertrouwen in de macOS-sleutelhanger.
Belangrijkste verschillen: Charles is cross-platform (Windows, macOS, Linux), Proxyman — alleen macOS en iOS. Charles heeft een bredere set tools (Rewrite, Map Local, Repeat, Auto Save) maar is betaald. Proxyman is gratis voor basisfunctionaliteit, met een moderne interface en native integratie met de iOS-simulator.
Charles voegt latentie toe wanneer verkeer door de proxy gaat, vooral bij actieve SSL-proxy (ontsleuteling/versleuteling). Op moderne computers is de latentie 5–15 milliseconden per verzoek. Voor prestatietests wordt aanbevolen SSL-proxy uit te schakelen voor statische bronnen (CSS, JS, afbeeldingen) via Recording Control.
Charles ondersteunt export naar formaten: .chls (eigen formaat, voor heropenen in Charles), HAR (HTTP Archive, opent in browsers en andere tools), CSV (voor verwerking in Excel of spreadsheets), Trace (voor export van een specifiek verzoek in curl-compatibel formaat). Export via het menu File → Export Session.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook