Charles Proxy и Proxyman: отладка HTTPS в мобильных приложениях
Однажды на проекте с интеграцией сложного API приложение на iOS начало выдавать ошибки NSURLErrorDomain -1200. Без перехвата трафика мы бы потратили дни на дебаг. Charles Proxy и Proxyman решают эту задачу за минуты. Эти инструменты перехватывают HTTPS, WebSocket и HTTP/2 трафик, показывают заголовки, тела запросов и ответов, тайминги. Мы — команда мобильных разработчиков с 5+ лет опыта, выполнили 50+ проектов по отладке и настройке сетевого взаимодействия. Настраиваем их под ключ для iOS, Android и Flutter-проектов с учётом особенностей вашего стека. Согласно Charles Proxy, установка корневого сертификата — обязательный шаг для просмотра HTTPS. Экономия времени на отладку достигает 16 часов в месяц, а снижение затрат — до 60%.
Проблемы, которые решаем: от certificate pinning до Throttling
Certificate pinning — главный барьер. Приложение с пиннингом отвергает прокси-сертификаты. Мы добавляем условное отключение в debug-сборках:
- iOS:
#if DEBUGсURLCredential(trust:) - Android:
network_security_config.xmlсdebug-overrides
В 80% проектов встречается либо самоподписанный CA, либо статический ключ. Без обхода pinning прокси бесполезен.
Медленное соединение — тестирование в условиях низкого bandwidth. Charles Throttling настраивается под реальные профили: 3G, Edge, кастомные задержки. Например, лимит 100 Кбит/с с задержкой 300 мс.
Rewrite правил — подмена ответов и URL для тестирования сценариев. Симуляция ошибки 500, замена production на staging, добавление заголовков. Экономит 2-4 часа в неделю.
Как обойти certificate pinning: code-примеры
Если приложение использует certificate pinning, Charles/Proxyman не увидят трафик — NSURLErrorDomain -1200 или SSLPeerUnverifiedException. Решение для dev/QA-сборки:
iOS: условно отключить pinning через `#if DEBUG`
#if DEBUG completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!)) #else // production pinning logic #endif Android: `network_security_config.xml` с debug-конфигом
<!-- res/xml/network_security_config.xml (debug) --> <network-security-config> <debug-overrides> <trust-anchors> <certificates src="user"/> </trust-anchors> </debug-overrides> </network-security-config> С таким подходом на debug-сборке система доверяет пользовательским CA, на release — нет. Гарантируем, что production-логика не изменится.
Какой инструмент выбрать: Proxyman или Charles?
| Критерий | Charles Proxy | Proxyman |
|---|---|---|
| Интерфейс | Java, устаревший | SwiftUI, современный |
| WebSocket | Есть, но неудобно | Нативная поддержка, фреймы в реальном времени |
| HTTP/2 | Ограниченно | Полная поддержка |
| Script editor | Нет встроенного | JavaScript-скрипты для модификации запросов |
| Breakpoints | Есть | Есть, удобнее управление |
| Цена | Бесплатно 30 дней, далее $50 | $49/год или $89 бессрочно |
Для работы с WebSocket и HTTP/2 Proxyman удобнее, Charles надёжнее для legacy и больших команд.
Как настроить rewrite rules?
Rewrite rules позволяют подменять запросы и ответы без изменения кода. В Charles: Tools → Rewrite. Создайте правило: поле для замены (URL, header, body) и значения. В Proxyman: Scripts → Add Script с JavaScript. Пример: замена api.production.com на api.staging.com, добавление токена в заголовок. Типовая настройка — 2-3 правила на проект — занимает 1-2 часа.
Процесс работы
- Анализ — изучаем стек проекта: сетевой слой (Alamofire, URLSession, Retrofit, OkHttp), наличие certificate pinning, необходимость WebSocket.
- Настройка прокси — установка сертификата на все устройства (iOS, Android, эмуляторы), конфигурация Wi-Fi proxy, включение SSL Proxying для нужных доменов.
- Обход pinning — подготовка debug-сборки с условным доверием. Если pinning на библиотеке (например, TrustKit), меняем конфигурацию.
- Rewrite правила — настройка подмены URL, заголовков или ответов для тестирования specific сценариев.
- Документация и обучение — фиксируем процесс для команды, проводим 1-часовой вебинар.
Что входит в работу?
- Полная документация по настройке прокси и обходу certificate pinning.
- Доступы к прокси-серверу (локальный или удалённый) с настроенными правилами.
- Обучение команды: 1-часовой вебинар с демонстрацией ключевых сценариев.
- Техническая поддержка в течение недели после настройки.
Типичные сценарии использования
- Проверка заголовков авторизации (Bearer token, API key) — 2-3 запроса.
- Отладка multipart/form-data загрузки файлов.
- Тестирование при медленном соединении (throttling в Charles: Proxy → Throttle Settings, профиль Edge).
- Проверка обработки ошибочных HTTP-ответов (Map Local → подставить 500 ответ).
- Отладка GraphQL запросов и WebSocket фреймов (в Proxyman — live view).
Это экономит до 40% времени QA-инженеров. На типовом проекте с 10 экранами и 5 API-запросами — 2-4 часа в неделю, до 16 часов в месяц. Закажите настройку — получите консультацию по выбору инструмента и интеграцию в ваш CI/CD.
Типичные проблемы и их решения
| Проблема | Причина | Решение |
|---|---|---|
| Трафик не виден | SSL Proxying не включён | Добавить * в список SSL Proxying |
| Certificate pinning блокирует | Приложение проверяет сертификат | Обойти через debug-конфиг |
| Замедление приложения | Throttling слишком жёсткий | Отключить или выставить высокий bandwidth |
| Ошибка при установке сертификата | iOS 15+ требует ручного доверия | Settings → General → About → Certificate Trust Settings → включить сертификат |
Свяжитесь с нами для оценки вашего проекта. Гарантируем настройку за 1 день — или вернём деньги. Получите консультацию и выберите оптимальный инструмент под ваш стек.







