Попробовать
Назад к блогу

Charles Proxy: что это и как пользоваться для отладки своего трафика

Charles Proxy: что это и как пользоваться для отладки своего трафика

Charles Proxy — программа-сниффер для компьютера, которая встаёт между приложением и интернетом и записывает каждый HTTP- и HTTPS-запрос, проходящий через неё. Разработчики и тестировщики запускают её, чтобы увидеть, что на самом деле отправляют их сайты, мобильные сборки и серверные клиенты, подменить ответ без правки кода или изобразить медленную сеть.

Ниже — весь рабочий цикл: как направить в Charles трафик браузера, расшифровать HTTPS через SSL Proxying, подключить телефон по Wi-Fi, пустить сам Charles через внешний прокси и какие встроенные инструменты экономят часы тестирования. Всё описанное предполагает, что вы отлаживаете собственные приложения и устройства или те, на проверку которых у вас есть разрешение.

Резидентные прокси

Резидентные выходы во многих странах, чтобы проверить, как ваш сервис видят посетители из-за рубежа

Попробовать

Что делает Charles и где он находится в цепочке

По устройству Charles — явный (explicit) прямой прокси, работающий на вашем компьютере. Клиент направляют на него сознательно, в отличие от шлюза, который перехватывает пакеты незаметно; разница подробно разобрана в материале о прозрачном и явном прокси. Запрос сначала попадает в Charles, тот сохраняет его в сессию и отправляет на настоящий сервер, ответ возвращается тем же путём.

Именно позиция посередине делает инструмент полезным:

  • видны заголовки, cookies, параметры адреса, тела JSON и тайминги каждого обращения;
  • запрос можно остановить на полпути и изменить до отправки или до возврата ответа;
  • удалённый файл можно заменить локальным, а канал — замедлить до скорости 3G.

Charles написан на Java, есть версии для macOS, Windows и Linux. Программа платная, с пробным периодом 30 дней; незарегистрированная копия к тому же ограничивает длительность одной сессии, поэтому при регулярной работе покупают лицензию. На момент написания актуальна ветка 5.x.

Установка и первые перехваченные запросы

  1. Скачайте установщик для своей системы с официального сайта Charles и запустите программу.
  2. При первом старте версии для macOS и Windows предлагают сами прописать системный прокси. Соглашайтесь: пункт Proxy → macOS Proxy (или Windows Proxy) останется отмеченным, и браузеры, которые берут системные настройки, пойдут через Charles.
  3. Откройте любой сайт в Chrome или Edge — через пару секунд в левой панели появятся имена хостов.

По умолчанию Charles принимает подключения HTTP-прокси на порту 8888. У Firefox собственные сетевые настройки: включите в нём использование системного прокси или вручную укажите 127.0.0.1 и порт 8888.

Дерево сессий Charles 5 с хостами Spotify и вкладка Overview с пометкой, что SSL Proxying для хоста не включён
Зашифрованные хосты в Charles до включения SSL Proxying

Structure или Sequence

Две вкладки над списком меняют вид сессии. Structure собирает обращения в дерево по хостам и путям — удобно, когда нужно всё, что вернуло одно API. Sequence показывает запросы в порядке появления, это помогает при пошаговом разборе сценария пользователя. Поле фильтра под списком Sequence оставляет на экране один хост, а пункт Focus в контекстном меню хоста убирает посторонний трафик в отдельную папку Other Hosts.

Для каждого запроса справа доступны вкладки Overview (статус, время, размеры), Contents (сырые запрос и ответ, просмотр JSON и картинок) и Summary для страниц с множеством подзапросов.

Расшифровка HTTPS через SSL Proxying

Без дополнительной настройки зашифрованные соединения видны только как строки CONNECT без содержимого. Чтобы заглянуть внутрь, Charles должен встать посредником для выбранных хостов, а устройство — доверять сертификату, которым Charles подписывает эти соединения.

Шаг 1. Добавьте корневой сертификат Charles в доверенные

  • macOS: выберите Help → SSL Proxying → Install Charles Root Certificate. Откроется «Связка ключей»; найдите запись Charles Proxy, раскройте блок Доверие и для параметра «При использовании этого сертификата» выберите «Всегда доверять».
  • Windows: тот же пункт меню запускает мастер импорта. Хранилище выберите вручную — Доверенные корневые центры сертификации, а не автоматический вариант.
  • Firefox: системное хранилище он не читает, поэтому, когда Firefox уже идёт через Charles, откройте chls.pro/ssl и отметьте доверие этому центру сертификации для сайтов.

Каждая установка Charles создаёт свой уникальный корневой сертификат, так что доверие к нему не открывает ваш компьютер другим пользователям Charles. И всё же удаляйте его из доверенных, когда отладка закончена.

Шаг 2. Укажите, какие хосты расшифровывать

Откройте Proxy → SSL Proxying Settings, оставьте отмеченным Enable SSL Proxying и добавьте записи в список Include. Аккуратнее всего — конкретный хост с портом 443; одиночная * расшифрует всё подряд, а это шум и заметное замедление. Есть путь короче: щёлкните правой кнопкой по хосту в дереве Structure и выберите Enable SSL Proxying.

Настройки SSL proxying в Charles: включён Enable SSL proxying, в списке Include указано *:443
Список адресов определяет, какие хосты расшифровывает Charles

Шаг 3. Проверьте результат

Обновите страницу. Запросы к этому хосту должны отображаться с читаемыми путями и телами и значком замка. Если вместо этого браузер ругается на сертификат, корневой сертификат добавлен не в то хранилище или браузер нужно перезапустить.

Перехват трафика с телефона

Отладка мобильных приложений — то, ради чего Charles чаще всего покупают: видно, что именно ваша сборка шлёт на бэкенд. Телефон и компьютер должны быть в одной сети Wi-Fi.

  1. В Charles откройте Help → SSL Proxying → Install Charles Root Certificate on a Mobile Device or Remote Browser. В окне будет локальный адрес компьютера и порт для подключения.
  2. На телефоне откройте параметры сети Wi-Fi, переключите прокси в режим Вручную и введите этот адрес с портом 8888.
  3. Сделайте любой запрос с телефона. Charles спросит, разрешить ли новое устройство, — нажмите Allow.
  4. В браузере телефона откройте chls.pro/ssl и установите скачанный профиль или сертификат.

Где находятся поля прокси на каждой платформе, пошагово показано в инструкциях для iPhone и для Android.

iPhone и iPad

После установки профиля в Настройки → Основные → VPN и управление устройством нужен ещё один переключатель: Настройки → Основные → Об этом устройстве → Доверие сертификатам, где включается полное доверие сертификату Charles. Без этого Safari и приложения продолжат отвергать расшифрованные соединения.

Android

Начиная с Android 7 приложения по умолчанию не доверяют сертификатам, установленным пользователем. Браузер может принять сертификат Charles, а ваше приложение — нет, пока отладочная сборка не разрешит это через network security config:

<!-- res/xml/debug_net_rules.xml -->
<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
            <certificates src="system" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

Подключите файл в теге application манифеста атрибутом android:networkSecurityConfig="@xml/debug_net_rules". Блок debug-overrides действует только в отладочных сборках, релизная версия сохраняет обычную проверку сертификатов. Чужие приложения и программы с закреплением сертификата (certificate pinning) откажутся работать с Charles — и это ожидаемо.

Телефон в той же беспроводной сети отправляет трафик на ноутбук с программой отладки, а та передаёт его веб-серверу
Телефон в локальной сети Wi-Fi шлёт запросы в Charles на компьютере, а Charles передаёт их серверу

Как пустить Charles через внешний прокси

Иногда компьютеру, на котором идёт отладка, нужно выходить в интернет через другой прокси: корпоративный шлюз или выход в другой стране, когда вы проверяете, как ваш собственный сервис показывает цены, баннеры или контент посетителям оттуда. Charles решает это цепочкой: клиент подключается к Charles, Charles — к внешнему прокси.

  1. Откройте Proxy → External Proxy Settings.
  2. Отметьте Use external proxy servers.
  3. Выберите протокол в списке: Web Proxy (HTTP), Secure Web Proxy (HTTPS) или SOCKS Proxy. У каждого свои поля хоста и порта, поэтому заполните все нужные типы.
  4. Введите адрес и порт внешнего прокси. Если он требует логин и пароль, отметьте Proxy server requires a password и заполните оба поля. Charles поддерживает авторизацию Basic и NTLM.
  5. Добавьте локальные и внутренние хосты в список исключений, чтобы они шли напрямую.

Учтите, как Charles распределяет трафик: записи HTTP и HTTPS обслуживают веб-запросы, а SOCKS используется для прочего трафика, например при пробросе портов. Если не уверены, какой протокол выдал провайдер, загляните в сравнение SOCKS5 и HTTP-прокси. Для проверки геозависимой выдачи адрес домашнего интернет-провайдера правдоподобнее серверного, поэтому для таких задач берут резидентные прокси с выбором страны и города.

Окно External proxies settings в Charles: Web Proxy (HTTP), адрес сервера, порт 50100, логин и пароль
Внешний прокси задаётся в External proxies settings
Клиент отправляет запрос локальной программе отладки, она пересылает его через удалённые промежуточные серверы в другом регионе на сайт
Цепочка: приложение подключается к Charles, Charles — к внешнему прокси, прокси — к сайту

Сохраните настройки и откройте через Charles любую страницу проверки IP. Адрес на ней должен принадлежать выходу внешнего прокси, а не вашей офисной или домашней сети.

Инструменты, которые ускоряют тестирование

Все они находятся в меню Tools и Proxy и работают только с трафиком, который Charles уже видит.

ИнструментЧто меняетКогда пригодится
Throttle SettingsСкорость и задержку всей сессии или выбранных хостовПроверка загрузчиков, тайм-аутов и повторов на слабой мобильной сети
BreakpointsОстанавливает запрос или ответ для правкиКак приложение реагирует на неожиданный статус или поле
Map LocalОтдаёт файл с диска вместо ответа сервераПримерить новый JSON до готовности бэкенда
Map RemoteПеренаправляет запросы с одного адреса на другойНаправить боевую сборку на тестовый сервер
RewriteПравила замены заголовков, тел и адресовДобавить отладочный заголовок ко всем вызовам
Repeat / Repeat AdvancedПовторяет перехваченный запрос один или много разВоспроизвести баг, лёгкая нагрузка на собственный эндпоинт
No Caching / Block CookiesУбирает заголовки кэша или cookiesПоведение при первом визите

Любой перехват сохраняется как сессия .chls или экспортируется в HAR — этот формат читают инструменты разработчика в браузерах и многие другие программы, так что коллега откроет ровно то, что видели вы.

Частые проблемы и решения

В Charles ничего не появляется. Выключен системный прокси (проверьте Proxy → macOS Proxy или Windows Proxy), браузер использует собственные настройки или маршрут перехватывает VPN-клиент.

HTTPS виден только как CONNECT с пометкой unknown. Хост не добавлен в список Include в SSL Proxying или SSL Proxying выключен целиком.

Ошибки сертификата в браузере или приложении. Корневой сертификат установлен, но доверие к нему не включено (переключатель на iOS, параметр в «Связке ключей», хранилище Windows), либо приложение закрепляет свой сертификат.

После настройки на телефоне пропал интернет. Сменился IP компьютера, файрвол закрыл порт 8888 или запрос на доступ был отклонён. Проверьте Proxy → Access Control Settings и брандмауэр компьютера.

Внешний прокси отвечает 407 или по тайм-ауту. Перепроверьте логин и пароль в External Proxy Settings и соответствие порта выбранному протоколу. Наш прокси-чекер покажет, отвечает ли внешний сервер вообще, прежде чем искать проблему в Charles.

Charles и другие отладочные прокси

ПрограммаПлатформыМодель оплатыСильная сторона
CharlesmacOS, Windows, LinuxПлатная лицензия, пробный периодЗрелый интерфейс, замедление сети, Map Local, мастер для телефонов
Fiddler EverywheremacOS, Windows, LinuxПодпискаАккуратный интерфейс, совместная работа
mitmproxymacOS, Windows, LinuxБесплатно, открытый кодСкрипты на Python, консольный и веб-интерфейс
ProxymanmacOS, Windows, LinuxБесплатный тариф и платные планыНативный вид на Mac, быстрая настройка iOS
HTTP ToolkitmacOS, Windows, LinuxБесплатный тариф и платные планыПерехват отдельных приложений и терминалов в один клик

Цены и возможности этих программ меняются, поэтому перед выбором загляните на сайт разработчика. Если вам ближе скрипты, чем клики, удобнее mitmproxy; для визуальной работы с мобильными приложениями обычно выбирают Charles или Proxyman.

Частые вопросы о Charles Proxy

Charles Proxy бесплатный?

Нет. Это платная программа с пробным периодом 30 дней, причём в пробной версии ограничена длительность каждой сессии. После окончания пробного срока нужна лицензия.

Почему Charles показывает unknown вместо содержимого HTTPS?

Для этого хоста не включён SSL Proxying. Добавьте хост в Proxy → SSL Proxying Settings, убедитесь, что корневой сертификат Charles в доверенных на устройстве, и обновите страницу.

Можно ли перехватить трафик любого приложения на телефоне?

Только тех приложений, которые принимают сертификат Charles. На Android 7 и новее это ваши отладочные сборки с network security config, а приложения с закреплением сертификата отказываются от него намеренно.

Какой порт использует Charles?

HTTP-прокси по умолчанию слушает порт 8888. Его можно сменить в Proxy → Proxy Settings, если порт уже занят другой программой.

Может ли Charles работать через другой прокси?

Да. В External Proxy Settings трафик Charles направляется на внешний HTTP-, HTTPS- или SOCKS-прокси с авторизацией Basic или NTLM и списком хостов-исключений.

Законно ли пользоваться Charles Proxy?

Отладка собственных приложений, устройств и тестовых аккаунтов — обычная задача разработки. Перехват чужого трафика без согласия в большинстве стран незаконен, поэтому используйте программу только там, где у вас есть право на проверку.