Charles Proxy est un serveur proxy multiplateforme pour le débogage du trafic HTTP/HTTPS, utilisé par les développeurs pour intercepter, visualiser et modifier les requêtes réseau. Selon Karl von Randow, créateur de l'outil (2025), Charles est utilisé dans plus de 50 000 entreprises dans le monde depuis 2004. Le proxy prend en charge l'interception du trafic depuis les appareils mobiles via WiFi, le proxy HTTPS avec installation de certificat racine et un large ensemble d'outils pour l'analyse d'API.
Points essentiels
Charles Proxy est un proxy HTTP et moniteur HTTP qui agit comme intermédiaire entre le client et le serveur. Toutes les requêtes et réponses passent par Charles, permettant de visualiser leur contenu, d'analyser leur structure, de modifier les données en temps réel et de simuler diverses conditions réseau. Il est disponible pour Windows, macOS et Linux.
Charles Proxy a été créé en 2004 par Karl von Randow et reste l'un des outils les plus populaires pour le débogage du trafic réseau. Contrairement aux alternatives gratuites, Charles propose une licence payante avec une période d'essai de 30 jours. L'outil se positionne comme une solution professionnelle pour les développeurs d'applications mobiles, les développeurs web et les ingénieurs QA qui ont besoin d'un contrôle total sur les communications HTTP.
Charles fonctionne comme un proxy système sur l'ordinateur et peut intercepter le trafic de tout appareil sur le même réseau : Android, iOS, simulateurs, émulateurs, navigateurs web et appareils IoT. Pour intercepter HTTPS, vous devez installer le certificat racine de Charles sur chaque appareil. Le trafic est pris en charge sur HTTP/1.1 et HTTP/2 (partiellement). HTTP/3 (QUIC) n'est pas pris en charge au niveau de l'interception.
Charles fonctionne sur le principe d'un proxy MITM (Man-in-the-Middle) : lorsqu'un client envoie une requête via Charles, l'outil intercepte la requête, la transmet au serveur cible, reçoit la réponse et la renvoie au client. Tout le trafic passe par Charles, ce qui permet de l'analyser et de le modifier.
Au lancement, Charles crée un proxy HTTP local sur le port 8888 (par défaut). Le système d'exploitation ou l'application est configuré pour utiliser ce proxy. Toutes les requêtes HTTP sont d'abord envoyées à Charles, qui agit ensuite comme un client complet vers le serveur cible. Pour HTTPS, Charles utilise sa propre technique de proxy SSL : il génère un certificat à la volée pour chaque domaine, signé par le certificat racine de Charles. Si le certificat racine est installé sur l'appareil comme étant de confiance, Charles peut déchiffrer et visualiser le trafic HTTPS.
Charles prend en charge deux modes : Proxy(serveur proxy classique) et SOCKS Proxy(pour le trafic UDP et TCP). Pour le développement web, on utilise le proxy HTTP standard. Pour les appareils mobiles — configurer le WiFi Proxy sur l'appareil en indiquant l'adresse IP de l'ordinateur exécutant Charles. macOS prend en charge la configuration automatique du proxy pour le simulateur iOS.
<!-- Configuration de network_security_config.xml pour Android avec prise en charge de Charles -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Faire confiance au certificat de Charles dans la version Debug -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy fournit un ensemble d'outils professionnels pour analyser et modifier le trafic, bien au-delà de la simple interception de requêtes.
L'outil Rewrite permet de modifier automatiquement certaines parties des requêtes ou réponses : en-têtes, paramètres d'URL, corps de la réponse. Par exemple, vous pouvez remplacer l'en-tête User-Agent par une valeur d'un autre appareil ou supprimer certains cookies. Breakpoints fonctionne comme un débogueur : la requête s'arrête à une étape sélectionnée (avant l'envoi ou avant la réception), et le développeur peut modifier manuellement son contenu avant qu'elle ne continue. Ceci est utile pour tester le traitement des réponses d'erreur ou des états non standard.
Map Local permet de remplacer une ressource réseau (CSS, JS, JSON) par un fichier local du disque. C'est indispensable dans le développement frontend : vous pouvez modifier CSS/JS et voir le résultat immédiatement sans déployer sur un serveur. Map Remote redirige les requêtes d'une URL vers une autre — par exemple, du serveur de production vers staging pour les tests. Les deux outils fonctionnent avec des motifs d'URL prenant en charge les jokers.
L'outil Throttle permet de simuler différents types de connexions réseau à l'aide de profils prédéfinis : 3G, EDGE, GPRS, DSL, WiFi. Vous pouvez configurer la limite de vitesse (téléchargement/envoi), la latence, la perte de paquets et la stabilité. C'est essentiel pour tester le comportement de l'application sur des connexions lentes ou instables — gestion correcte des timeouts, tentatives de reprise, mode hors ligne.
| Profil | Téléchargement | Envoi | Latence | Scénario typique |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Test avec signal mobile faible |
| EDGE | 130 kbps | 50 kbps | 400 ms | Connexion extrêmement lente |
| GPRS | 50 kbps | 20 kbps | 500 ms | Connexion minimale possible |
| DSL | 2 Mbps | 256 kbps | 50 ms | Connexion filaire domestique |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | Bonne connexion WiFi |
Charles peut enregistrer automatiquement les sessions de trafic dans des fichiers .chls, ce qui permet de les analyser ultérieurement ou de les partager avec des collègues. Recording Control permet de configurer de manière flexible le trafic à enregistrer : par domaine, type de contenu ou code d'état. C'est pratique pour la surveillance à long terme des API.
Pour déboguer le trafic des applications mobiles, Charles est configuré comme un WiFi Proxy : tous les appareils sur le même réseau que l'ordinateur peuvent acheminer le trafic via Charles. Une configuration correcte de HTTPS nécessite l'installation du certificat de Charles sur l'appareil mobile.
Pour Android : ouvrir Settings → WiFi → Advanced → Proxy, sélectionner Manual et saisir l'adresse IP de l'ordinateur avec le port 8888. Ensuite, ouvrir un navigateur sur l'appareil et aller sur http://chls.pro/ssl pour télécharger le certificat de Charles. Sous Android 7+ (API 24+), un network_security_config.xml est nécessaire pour faire confiance aux certificats utilisateur dans les versions Debug — sinon, l'application pourrait ne pas acheminer le trafic via Charles.
Pour iOS : Settings → WiFi → configurer le proxy avec IP et port 8888. Ensuite Safari → http://chls.pro/ssl → installer le profil de certificat. Sous iOS 10.3+, vous devez en outre activer la confiance du certificat : Settings → General → About → Certificate Trust Settings → activer Charles Proxy. iOS est plus strict concernant les certificats : certaines applications peuvent utiliser SSL Pinning, bloquant le trafic via Charles même avec un certificat de confiance.
Si l'application utilise SSL Pinning(fixation du certificat serveur), le proxy standard via Charles ne fonctionnera pas — l'application rejettera le certificat de Charles. Solutions : désactiver SSL Pinning dans les versions Debug via les paramètres OkHttp ou URLSession, utiliser Frida pour contourner le pinning au moment de l'exécution, ou utiliser Android Emulator avec accès root.
Charles Proxy résout des tâches spécifiques de développement et de test. Examinons les scénarios les plus courants où l'outil est indispensable.
Le scénario le plus courant — vérifier l'exactitude des requêtes API. Charles affiche l'URL exacte de la requête, les en-têtes, le corps et les paramètres. Si le serveur renvoie une réponse inattendue, vous voyez immédiatement : la structure JSON, le code d'erreur, les en-têtes de réponse. Cela permet de distinguer les erreurs client des erreurs serveur sans journaux des deux côtés.
À l'aide des profils Throttle, vous pouvez tester le comportement de l'application avec une faible vitesse de connexion : un indicateur de chargement est-il affiché, les timeouts sont-ils correctement gérés, l'UI se fige-t-elle en cas de perte de connexion. Il est particulièrement important de tester la mise en cache — si les données sont déjà chargées, l'application doit les afficher depuis le cache plutôt que d'entrer dans un état de chargement infini.
À l'aide de Breakpoints, vous pouvez modifier la réponse du serveur avant qu'elle ne soit envoyée à l'application. Par exemple, renvoyer un tableau vide au lieu de données, changer le code d'état en 500, ajouter un nouveau champ au JSON. Cela permet de tester le traitement des cas limites sans modifier le code du serveur — l'une des utilisations les plus puissantes de Charles dans le développement mobile.
Questions fréquentes
Charles Proxy est un produit commercial avec une période d'essai de 30 jours. Après la fin de la période d'essai, le programme continue de fonctionner avec une pause de 30 minutes à chaque démarrage. Le coût de la licence est de 50 $ par copie. Il existe des alternatives gratuites telles que Proxyman (macOS) et mitmproxy (multiplateforme).
Oui, le simulateur iOS utilise automatiquement le proxy système de macOS. Il suffit de lancer Charles et d'activer le proxy SSL — tout le trafic du simulateur sera intercepté. La configuration du certificat pour le simulateur se fait automatiquement ; vous devez seulement faire confiance au certificat de Charles dans le trousseau macOS.
Principales différences : Charles est multiplateforme (Windows, macOS, Linux), Proxyman est uniquement pour macOS et iOS. Charles dispose d'un ensemble d'outils plus large (Rewrite, Map Local, Repeat, Auto Save) mais est payant. Proxyman est gratuit pour les fonctionnalités de base, avec une interface moderne et une intégration native avec le simulateur iOS.
Charles ajoute de la latence lorsque le trafic passe par le proxy, surtout avec un proxy SSL actif (déchiffrement/chiffrement). Sur les ordinateurs modernes, le délai est de 5 à 15 millisecondes par requête. Pour les tests de performance, il est recommandé de désactiver le proxy SSL pour le contenu statique (CSS, JS, images) via Recording Control.
Charles prend en charge l'exportation vers les formats : .chls(natif, pour rouvrir dans Charles), HAR(HTTP Archive, s'ouvre dans les navigateurs et autres outils), CSV(pour le traitement dans Excel ou les tableurs), Trace(pour exporter une requête spécifique dans un format compatible curl). Exportation via le menu File → Export Session.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi