Charles Proxy е многоплатформен прокси сървър за отстраняване на грешки в HTTP/HTTPS трафик, използван от разработчици за прихващане, преглед и модифициране на мрежови заявки. Според Karl von Randow, създател на инструмента (2025), Charles се използва в над 50 000 компании по целия свят от 2004 г. Проксито поддържа прихващане на трафик от мобилни устройства чрез WiFi, HTTPS прокси с инсталиране на коренов сертификат и широк набор от инструменти за анализ на API.
Основни точки
Charles Proxy е HTTP прокси и HTTP монитор, който действа като посредник между клиент и сървър. Всички заявки и отговори преминават през Charles, което позволява преглед на тяхното съдържание, анализ на структурата, промяна на данни в реално време и симулиране на различни мрежови условия. Достъпен за Windows, macOS и Linux.
Charles Proxy е създаден през 2004 г. от Karl von Randow и остава един от най-популярните инструменти за отстраняване на грешки в мрежовия трафик. За разлика от безплатните алтернативи, Charles предлага платен лиценз с 30-дневен пробен период. Инструментът е позициониран като професионално решение за разработчици на мобилни приложения, уеб разработчици и QA инженери, които се нуждаят от пълен контрол над HTTP комуникациите.
Charles работи като системен прокси на компютъра и може да прихваща трафик от всякакви устройства в същата мрежа: Android, iOS, симулатори, емулатори, уеб браузъри и IoT устройства. За прихващане на HTTPS трябва да инсталирате кореновия сертификат на Charles на всяко устройство. Трафикът се поддържа на HTTP/1.1 и HTTP/2 (частично). HTTP/3 (QUIC) не се поддържа на ниво прихващане.
Charles работи на принципа на MITM (Man-in-the-Middle) прокси: когато клиент изпраща заявка чрез Charles, инструментът прихваща тази заявка, препраща я към целевия сървър, получава отговора и го връща обратно на клиента. Целият трафик преминава през Charles, което позволява неговия анализ и модификация.
При стартиране Charles създава локално HTTP прокси на порт 8888 (по подразбиране). Операционната система или приложението се конфигурира да използва това прокси. Всички HTTP заявки първо се изпращат на Charles, който след това действа като пълноправен клиент за целевия сървър. За HTTPS Charles използва своя собствена техника за SSL прокси: генерира сертификат в движение за всеки домейн, подписан от кореновия сертификат на Charles. Ако кореновият сертификат е инсталиран като доверен на устройството, Charles може да дешифрира и преглежда HTTPS трафик.
Charles поддържа два режима: Proxy (класически прокси сървър) и SOCKS Proxy (за UDP и TCP трафик). За уеб разработка се използва стандартно HTTP прокси. За мобилни устройства — конфигуриране на WiFi Proxy на устройството с посочване на IP адреса на компютъра, на който работи Charles. MacOS поддържа автоматична конфигурация на прокси за iOS симулатора.
<!-- Конфигуриране network_security_config.xml за Android с подкрепа за Charles -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Доверявайте на сертификата на Charles в Debug сборка -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy предоставя набор от професионални инструменти за анализ и модификация на трафик, които далеч надхвърлят простото прихващане на заявки.
Инструментът Rewrite позволява автоматична промяна на определени части от заявки или отговори: заглавки, URL параметри, тяло на отговора. Например можете да замените заглавката User-Agent със стойност от друго устройство или да премахнете конкретни бисквитки. Breakpoints работят като дебъгер: заявката се спира на избран етап (преди изпращане или преди получаване) и разработчикът може ръчно да промени съдържанието ѝ, преди да продължи. Това е полезно за тестване на обработка на грешни отговори или нестандартни състояния.
Map Local позволява замяна на мрежов ресурс (CSS, JS, JSON) с локален файл от диска. Това е незаменимо при разработка на фронтенд: можете да промените CSS/JS и веднага да видите резултата без разполагане на сървър. Map Remote пренасочва заявки от един URL към друг — например от продуктов сървър към staging за тестване. И двата инструмента работят с URL шаблони, поддържащи wildcards.
Инструментът Throttle позволява симулиране на различни видове мрежови връзки по предварително зададени профили: 3G, EDGE, GPRS, DSL, WiFi. Можете да конфигурирате ограничения на скоростта (изтегляне/качване), забавяне, загуба на пакети и стабилност. Това е критично за тестване на поведението на приложението при бавна или нестабилна връзка — правилна обработка на таймаути, повторни опити, офлайн режим.
| Профил | Изтегляне | Качване | Забавяне | Типичен сценарий |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Тестване със слаб мобилен сигнал |
| EDGE | 130 kbps | 50 kbps | 400 ms | Изключително бавна връзка |
| GPRS | 50 kbps | 20 kbps | 500 ms | Минимално възможна връзка |
| DSL | 2 Mbps | 256 kbps | 50 ms | Домашна кабелна връзка |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | Добра WiFi връзка |
Charles може автоматично да запазва сесии на трафик в .chls файлове, което позволява по-късен анализ или споделяне с колеги. Recording Control позволява гъвкава конфигурация кой трафик да се запазва: по домейни, типове съдържание, статус кодове. Това е удобно за дългосрочно наблюдение на API.
За отстраняване на грешки в трафика на мобилни приложения, Charles се конфигурира като WiFi Proxy: всички устройства в същата мрежа като компютъра могат да насочват трафик през Charles. Правилната настройка на HTTPS изисква инсталиране на Charles сертификат на мобилното устройство.
За Android: отворете Настройки → WiFi → Разширени → Прокси, изберете Ръчно и въведете IP адреса на компютъра с порт 8888. След това отворете браузъра на устройството и отидете на http://chls.pro/ssl за изтегляне на Charles сертификата. На Android 7+ (API 24+) е необходим network_security_config.xml за доверие на потребителски сертификати в Debug сборка — в противен случай приложението може да не пропуска трафик през Charles.
За iOS: Настройки → WiFi → конфигуриране на прокси на IP и порт 8888. След това Safari → http://chls.pro/ssl → инсталиране на профил на сертификат. В iOS 10.3+ трябва допълнително да включите доверие на сертификата: Настройки → Общи → Информация → Настройки за доверие на сертификати → включете Charles Proxy. iOS е по-строг по отношение на сертификатите: някои приложения могат да използват SSL Pinning, блокирайки трафика през Charles дори с доверен сертификат.
Ако приложението използва SSL Pinning(фиксиране на сертификата на сървъра), стандартното прокси през Charles няма да работи — приложението ще отхвърли Charles сертификата. Решения: деактивирайте SSL Pinning в Debug сборка чрез настройки на OkHttp или URLSession, използвайте Frida за заобикаляне на pinning по време на изпълнение, или използвайте Android Emulator с root достъп.
Charles Proxy решава конкретни задачи за разработка и тестване. Нека разгледаме най-честите сценарии, в които инструментът е незаменим.
Най-честият сценарий — проверка на коректността на API заявки. Charles показва точния URL на заявката, заглавките, тялото, параметрите. Ако сървърът върне неочакван отговор, веднага се виждат: JSON структурата, кодът за грешка, заглавките на отговора. Това позволява разграничаване на грешка от страна на клиента от грешка от страна на сървъра без логове от двете страни.
Използвайки Throttle профили, можете да проверите как се държи приложението при ниска скорост на връзката: дали се показва индикатор за зареждане, дали таймаутът се обработва правилно, дали UI замръзва при загуба на връзка. Тестването на кеширане е особено важно — ако данните вече са заредени, приложението трябва да ги покаже от кеша, а не да влиза в безкрайно зареждане.
С помощта на Breakpoints можете да промените отговора на сървъра преди да бъде изпратен на приложението. Например да върнете празен масив вместо данни, да промените статус кода на 500, да добавите ново поле в JSON. Това позволява тестване на обработката на гранични случаи без промяна на сървърния код — едно от най-мощните приложения на Charles в мобилната разработка.
Често задавани въпроси
Charles Proxy е търговски продукт с 30-дневен пробен период. След изтичане на пробния период програмата продължава да работи с 30-минутна пауза при всяко стартиране. Цената на лиценза е 50$ за едно копие. Съществуват безплатни алтернативи като Proxyman (macOS) и mitmproxy (многоплатформен).
Да, iOS симулаторът автоматично използва системното прокси на macOS. Достатъчно е да стартирате Charles и да включите SSL прокси — целият трафик на симулатора ще бъде прихванат. Настройката на сертификата за симулатора става автоматично, изисква се само да се доверите на Charles сертификата в ключодържателя на macOS.
Основни разлики: Charles е многоплатформен (Windows, macOS, Linux), Proxyman — само macOS и iOS. Charles има по-широк набор от инструменти (Rewrite, Map Local, Repeat, Auto Save), но е платен. Proxyman е безплатен за основна функционалност, с модерен интерфейс и родна интеграция с iOS симулатора.
Charles добавя забавяне при преминаване на трафик през проксито, особено при активно SSL прокси (дешифриране/криптиране). На съвременни компютри забавянето е 5–15 милисекунди на заявка. За тестове на производителност се препоръчва изключване на SSL прокси за статични ресурси (CSS, JS, изображения) чрез Recording Control.
Charles поддържа експорт в формати: .chls(собствен, за повторно отваряне в Charles), HAR (HTTP Archive, отваря се в браузъри и други инструменти), CSV (за обработка в Excel или електронни таблици), Trace (за експорт на конкретна заявка в curl-съвместим формат). Експорт чрез меню File → Export Session.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също