Charles Proxy to wieloplatformowy serwer proxy do debugowania ruchu HTTP/HTTPS, używany przez programistów do przechwytywania, przeglądania i modyfikacji żądań sieciowych. Według Karla von Randow, twórcy narzędzia (2025), Charles jest używany w ponad 50 000 firm na całym świecie od 2004 roku. Proxy obsługuje przechwytywanie ruchu z urządzeń mobilnych przez WiFi, proxy HTTPS z instalacją certyfikatu głównego oraz szeroki zestaw narzędzi do analizy API.
Najważniejsze
Charles Proxy — to proxy HTTP i monitor HTTP, działający jako pośrednik między klientem a serwerem. Wszystkie żądania i odpowiedzi przechodzą przez Charles, co pozwala przeglądać ich zawartość, analizować strukturę, modyfikować dane w czasie rzeczywistym i symulować różne warunki sieciowe. Dostępny dla Windows, macOS i Linux.
Charles Proxy został stworzony w 2004 roku przez Karla von Randow i pozostaje jednym z najpopularniejszych narzędzi do debugowania ruchu sieciowego. W przeciwieństwie do darmowych alternatyw, Charles oferuje płatną licencję z 30-dniowym okresem próbnym. Narzędzie jest pozycjonowane jako profesjonalne rozwiązanie dla programistów aplikacji mobilnych, web-developerów i inżynierów QA, którzy potrzebują pełnej kontroli nad komunikacją HTTP.
Charles działa jako systemowe proxy na komputerze i może przechwytywać ruch z dowolnych urządzeń w tej samej sieci: Android, iOS, symulatorów, emulatorów, przeglądarek internetowych i urządzeń IoT. Do przechwytywania HTTPS należy zainstalować certyfikat główny Charles na każdym urządzeniu. Ruch jest obsługiwany na HTTP/1.1 i HTTP/2 (częściowo). HTTP/3 (QUIC) nie jest obsługiwany na poziomie przechwytywania.
Charles działa na zasadzie MITM (Man-in-the-Middle) proxy: gdy klient wysyła żądanie przez Charles, narzędzie przechwytuje to żądanie, przekierowuje do docelowego serwera, otrzymuje odpowiedź i przekazuje ją z powrotem do klienta. Cały ruch przechodzi przez Charles, co pozwala go analizować i modyfikować.
Po uruchomieniu Charles tworzy lokalne proxy HTTP na porcie 8888 (domyślnie). System operacyjny lub aplikacja jest konfigurowana do korzystania z tego proxy. Wszystkie żądania HTTP są najpierw wysyłane do Charles, który następnie działa jako pełnoprawny klient dla docelowego serwera. Dla HTTPS Charles używa własnej techniki SSL-proxy: generuje certyfikat w locie dla każdej domeny, podpisany certyfikatem głównym Charles. Jeśli certyfikat główny jest zainstalowany na urządzeniu jako zaufany, Charles może odszyfrowywać i przeglądać ruch HTTPS.
Charles obsługuje dwa tryby: Proxy (klasyczny serwer proxy) i SOCKS Proxy (dla ruchu UDP i TCP). Do tworzenia stron internetowych używa się standardowego HTTP-proxy. Dla urządzeń mobilnych — konfiguracja WiFi Proxy na urządzeniu z podaniem adresu IP komputera, na którym uruchomiono Charles. MacOS obsługuje automatyczną konfigurację proxy dla symulatora iOS.
<!-- Konfiguracja network_security_config.xml dla Android z obsługą Charles -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Zaufać certyfikatowi Charles w kompilacji Debug -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy udostępnia zestaw profesjonalnych narzędzi do analizy i modyfikacji ruchu, wykraczający daleko poza zwykłe przechwytywanie żądań.
Narzędzie Rewrite umożliwia automatyczną zmianę określonych części żądań lub odpowiedzi: nagłówków, parametrów URL, treści odpowiedzi. Na przykład można zastąpić nagłówek User-Agent wartością z innego urządzenia lub usunąć określone cookies. Breakpoints działają jak debugger: żądanie jest zatrzymywane na wybranym etapie (przed wysłaniem lub przed otrzymaniem), a programista może ręcznie zmienić jego zawartość, zanim pójdzie dalej. Jest to przydatne do testowania obsługi błędnych odpowiedzi lub niestandardowych stanów.
Map Local umożliwia zastąpienie zasobu sieciowego (CSS, JS, JSON) lokalnym plikiem z dysku. Jest to niezastąpione przy tworzeniu frontendu: można modyfikować CSS/JS i natychmiast widzieć wynik bez wdrażania na serwer. Map Remote przekierowuje żądania z jednego URL na inny — na przykład z serwera produkcyjnego na staging do testowania. Oba narzędzia działają na wzorcach URL z obsługą wildcards.
Narzędzie Throttle umożliwia symulację różnych typów połączeń sieciowych według predefiniowanych profili: 3G, EDGE, GPRS, DSL, WiFi. Można skonfigurować ograniczenie prędkości (download/upload), opóźnienie, utratę pakietów i stabilność. Jest to krytycznie ważne do testowania zachowania aplikacji przy wolnym lub niestabilnym połączeniu — prawidłowa obsługa timeoutów, ponawianie prób, tryb offline.
| Profil | Download | Upload | Opóźnienie | Typowy scenariusz |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Testowanie przy słabym sygnale komórkowym |
| EDGE | 130 kbps | 50 kbps | 400 ms | Ekstremalnie wolne połączenie |
| GPRS | 50 kbps | 20 kbps | 500 ms | Minimalne możliwe połączenie |
| DSL | 2 Mbps | 256 kbps | 50 ms | Domowe połączenie przewodowe |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | Dobre połączenie WiFi |
Charles może automatycznie zapisywać sesje ruchu do plików .chls, co pozwala analizować je później lub przekazywać współpracownikom. Recording Control umożliwia elastyczne skonfigurowanie, który ruch ma być zapisywany: według domen, typów treści, kodów statusu. Jest to wygodne do długoterminowego monitorowania działania API.
Do debugowania ruchu aplikacji mobilnych Charles jest konfigurowany jako WiFi Proxy: wszystkie urządzenia w tej samej sieci co komputer mogą kierować ruch przez Charles. Prawidłowa konfiguracja HTTPS wymaga instalacji certyfikatu Charles na urządzeniu mobilnym.
Dla Android należy: otworzyć Ustawienia → WiFi → Zaawansowane → Proxy, wybrać Manual i podać adres IP komputera z portem 8888. Następnie otworzyć przeglądarkę na urządzeniu i przejść pod adres http://chls.pro/ssl w celu pobrania certyfikatu Charles. Na Android 7+ (API 24+) wymagany jest network_security_config.xml do zaufania certyfikatom użytkownika w kompilacji Debug — w przeciwnym razie aplikacja może nie przepuszczać ruchu przez Charles.
Dla iOS: Ustawienia → WiFi → skonfiguruj proxy na IP i port 8888. Następnie Safari → http://chls.pro/ssl → zainstaluj profil certyfikatu. W iOS 10.3+ należy dodatkowo włączyć zaufanie do certyfikatu: Ustawienia → Ogólne → Informacje → Ustawienia zaufania certyfikatów → włączyć Charles Proxy. iOS jest bardziej rygorystyczny w kwestii certyfikatów: niektóre aplikacje mogą używać SSL Pinning, blokując ruch przez Charles nawet z zaufanym certyfikatem.
Jeśli aplikacja używa SSL Pinning (przypięcie certyfikatu serwera), standardowe proxy przez Charles nie zadziała — aplikacja odrzuci certyfikat Charles. Rozwiązania: wyłączyć SSL Pinning w kompilacji Debug przez ustawienia OkHttp lub URLSession, użyć Fridy do obejścia pinning w runtime, lub zastosować Android Emulator z dostępem root.
Charles Proxy rozwiązuje konkretne zadania programistyczne i testowe. Rozważmy najczęstsze scenariusze, w których narzędzie jest niezastąpione.
Najczęstszy scenariusz — sprawdzanie poprawności żądań API. Charles pokazuje dokładny URL żądania, nagłówki, treść, parametry. Jeśli serwer zwraca nieoczekiwaną odpowiedź, od razu widać: strukturę JSON, kod błędu, nagłówki odpowiedzi. Pozwala to odróżnić błąd po stronie klienta od błędu po stronie serwera bez logów z obu stron.
Używając profili Throttle, można sprawdzić, jak aplikacja zachowuje się przy niskiej prędkości połączenia: czy wyświetlany jest wskaźnik ładowania, czy timeout jest prawidłowo obsługiwany, czy UI nie zawiesza się przy utracie połączenia. Szczególnie ważne jest testowanie buforowania — jeśli dane są już załadowane, aplikacja powinna wyświetlać je z pamięci podręcznej, a nie wchodzić w nieskończone ładowanie.
Za pomocą Breakpoints można zmienić odpowiedź serwera przed jej wysłaniem do aplikacji. Na przykład zwrócić pustą tablicę zamiast danych, zmienić kod statusu na 500, dodać nowe pole do JSON. Pozwala to sprawdzić obsługę przypadków brzegowych bez modyfikacji kodu serwera — jedno z najpotężniejszych zastosowań Charles w programowaniu mobilnym.
Często zadawane pytania
Charles Proxy jest produktem komercyjnym z 30-dniowym okresem próbnym. Po zakończeniu okresu próbnego program nadal działa z 30-minutową przerwą przy każdym uruchomieniu. Koszt licencji to 50$ za jedną kopię. Istnieją darmowe alternatywy, takie jak Proxyman (macOS) i mitmproxy (wieloplatformowy).
Tak, symulator iOS automatycznie używa systemowego proxy macOS. Wystarczy uruchomić Charles i włączyć SSL-proxy — cały ruch symulatora zostanie przechwycony. Konfiguracja certyfikatu dla symulatora odbywa się automatycznie, wymagane jest tylko zaufanie certyfikatowi Charles w pęku kluczy macOS.
Główne różnice: Charles jest wieloplatformowy (Windows, macOS, Linux), Proxyman — tylko macOS i iOS. Charles ma szerszy zestaw narzędzi (Rewrite, Map Local, Repeat, Auto Save), ale jest płatny. Proxyman jest darmowy dla podstawowej funkcjonalności, z nowoczesnym interfejsem i natywną integracją z symulatorem iOS.
Charles dodaje opóźnienie przy przechodzeniu ruchu przez proxy, szczególnie przy aktywnym SSL-proxy (deszyfrowanie/szyfrowanie). Na nowoczesnych komputerach opóźnienie wynosi 5–15 milisekund na żądanie. Do testów wydajności zaleca się wyłączenie SSL-proxy dla statycznych zasobów (CSS, JS, obrazy) przez Recording Control.
Charles obsługuje eksport do formatów: .chls (własny, do ponownego otwarcia w Charles), HAR (HTTP Archive, otwierany w przeglądarkach i innych narzędziach), CSV (do obróbki w Excel lub arkuszach kalkulacyjnych), Trace (do eksportu konkretnego żądania w formacie zgodnym z curl). Eksport przez menu File → Export Session.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również