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 году Карлом фон Рэндоу и остаётся одним из самых популярных инструментов для отладки сетевого трафика. В отличие от бесплатных альтернатив, 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-proxy. Для мобильных устройств — настройка 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 на значение от другого устройства или убрать определённые cookies. Breakpoints работают как отладчик: запрос останавливается на выбранном этапе (перед отправкой или перед получением), и разработчик может вручную изменить его содержимое до того, как оно пойдёт дальше. Это полезно для тестирования обработки ошибочных ответов или нестандартных состояний.
Map Local позволяет подменить сетевой ресурс (CSS, JS, JSON) на локальный файл с диска. Это незаменимо при разработке фронтенда: можно изменять CSS/JS и сразу видеть результат, не деплоя на сервер. Map Remote перенаправляет запросы с одного URL на другой — например, с продакшен-сервера на staging для тестирования. Оба инструмента работают по шаблонам URL с поддержкой wildcards.
Инструмент Throttle позволяет имитировать различные типы сетевых соединений по предустановленным профилям: 3G, EDGE, GPRS, DSL, WiFi. Можно настроить ограничение скорости (download/upload), latency, packet loss и stability. Это критически важно для тестирования поведения приложения при медленном или нестабильном соединении — правильная обработка таймаутов, повторные попытки, офлайн-режим.
| Профиль | Download | Upload | Latency | Типичный сценарий |
|---|---|---|---|---|
| 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 необходимо: открыть Settings → WiFi → Advanced → Proxy, выбрать Manual и указать IP-адрес компьютера с портом 8888. После этого открыть браузер на устройстве и перейти по адресу http://chls.pro/ssl для скачивания сертификата Charles. На Android 7+ (API 24+) требуется network_security_config.xml для доверия пользовательским сертификатам в Debug-сборке — иначе приложение может не пропускать трафик через Charles.
Для iOS: Settings → WiFi → настроить прокси на IP и порт 8888. Затем Safari → http://chls.pro/ssl → установить профиль сертификата. В iOS 10.3+ необходимо дополнительно включить доверие сертификату: Settings → General → About → Certificate Trust Settings → включить Charles Proxy. iOS более строг в отношении сертификатов: некоторые приложения могут использовать SSL Pinning, блокируя трафик через Charles даже с доверенным сертификатом.
Если приложение использует SSL Pinning (фиксацию сертификата сервера), стандартное проксирование через Charles не сработает — приложение отклонит сертификат Charles. Решения: отключить SSL Pinning в Debug-сборке через настройки OkHttp или URLSession, использовать Frida для обхода pinning в runtime, или применять Android Emulator с корневым доступом.
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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также