TL;DR
- Charles Proxy перехватывает HTTP/HTTPS трафик для инспекции и модификации
- SSL Proxying требует установки сертификата на устройство (мобильное/браузер)
- Breakpoints позволяют модифицировать запросы/ответы в реальном времени
- Map Local/Remote перенаправляет запросы на локальные файлы или другие серверы
- Throttling симулирует медленные сети для тестирования производительности
Идеально для: Мобильных тестировщиков, API-разработчиков, отладки production-проблем Пропусти, если: Нужна только простая инспекция запросов (хватит DevTools браузера)
Charles Proxy — это HTTP-прокси, который встаёт между вашим приложением и его серверами и позволяет тестировщикам просматривать, изменять и подменять сетевой трафик в реальном времени. SSL Proxying расшифровывает HTTPS-трафик мобильных приложений, брейкпоинты позволяют править запросы на лету, Map Local возвращает подставные ответы без изменений на бэкенде, а троттлинг имитирует медленные сети. В этом руководстве разобраны настройка, установка сертификатов на устройства и повседневные рабочие сценарии QA-команд для отладки API и воспроизведения граничных случаев.
В этом руководстве:
- Настройка SSL Proxying
- HTTP/1.1 вместо HTTP/2
- Настройка iOS и Android
- Моки через Map Local
- Троттлинг сети
Что такое Charles Proxy?
Charles Proxy — это HTTP proxy и монитор. Он захватывает сетевой трафик от любого приложения, настроенного на его использование, отображая запросы и ответы для инспекции.
Что делает Charles:
- Перехватывает трафик — видит каждый запрос приложения
- Инспектирует SSL/TLS — расшифровывает HTTPS для отладки
- Модифицирует запросы — меняет headers, body, URL перед отправкой
- Мокает ответы — возвращает фейковые данные без изменений сервера
- Троттлит bandwidth — симулирует медленные/нестабильные сети
- Записывает сессии — сохраняет и воспроизводит трафик
«Мобильное тестирование не может жить только в симуляторе. Тестирование на реальных устройствах в условиях фрагментированного железа и нестабильной сети выявляет баги, которые эмуляторы никогда не воспроизведут.» — Юрий Кан, Senior QA Lead
Установка и настройка
Установка
macOS:
brew install --cask charles
SSL Proxying
По умолчанию Charles не может читать HTTPS. Включи SSL Proxying:
- Proxy → SSL Proxying Settings
- Включи Enable SSL Proxying
- Добавь хосты:
*для всех или конкретные какapi.example.com - Установи Charles Root Certificate:
- macOS: Help → SSL Proxying → Install Charles Root Certificate
- Доверь в Keychain Access (Always Trust)
Как принудительно включить HTTP/1.1 вместо HTTP/2 в Charles Proxy?
Открой Proxy → Proxy Settings, останься на вкладке Proxies и сними флажок Support HTTP/2 в группе HTTP Proxy. Когда поддержка HTTP/2 в Charles отключена, запросы через прокси должны идти по HTTP/1.1 — проверь это на шаге 4 ниже. Чтобы вернуть HTTP/2, поставь флажок обратно.
- Перейди в Proxy → Proxy Settings → Proxies
- Сними флажок Support HTTP/2 и сохрани настройки
- Повтори запрос из приложения или браузера
- Выбери запрос и открой вкладку Overview: в строке Protocol должно быть
HTTP/1.1вместоHTTP/2.0. Поле Protocol также можно вывести колонкой в Sequence view
Название флажка и поле Protocol одинаковы в Charles 4.6.8 и 5.2.1. В онлайн-документации эта опция не описана, но сама поддержка HTTP/2 указана в истории версий Charles начиная с версии 4.0.
Зачем тестировщику отключать HTTP/2:
- Локализовать баги, связанные с протоколом — если сбой исчезает на HTTP/1.1, он связан с обработкой HTTP/2 на клиенте, сервере или в прокси
- Исключить влияние прокси на старых сборках — в истории версий перечислены исправления проксирования HTTP/2 в 5.2 и 5.2.1, включая зависание, когда параллельные потоки исчерпывают окно соединения
- Проверить fallback на HTTP/1.1 — убедиться, что приложение работает, когда HTTP/2 недоступен на сетевом маршруте
Два связанных замечания из официальной документации:
- Safari использует HTTP/2 через Charles только в режиме SOCKS, поэтому запросы HTTP/1.1 из Safari не означают, что флажок снят (Browser & System Configuration)
- Начиная с Charles 5.1 Map Remote умеет отображать запрос HTTP/2 на адрес назначения HTTP/1.1 (история версий)
Настройка мобильных устройств
iOS
- Подключи iPhone к той же WiFi что и компьютер
- Найди IP компьютера: Help → Local IP Address
- На iPhone: Настройки → WiFi → (i) рядом с сетью
- Настроить Proxy → Вручную
- Сервер: IP компьютера
- Порт: 8888
- Установи SSL-сертификат:
- Открой Safari, перейди на
chls.pro/ssl - Скачай и установи профиль
- Настройки → Основные → Об этом устройстве → Доверие сертификатов
- Открой Safari, перейди на
Android
- Подключись к той же WiFi
- Настройки WiFi → Изменить сеть → Дополнительно
- Proxy: Вручную
- Имя хоста: IP компьютера
- Порт: 8888
- Установи сертификат с
chls.pro/ssl
Модификация запросов
Breakpoints
Останавливай запросы для ручной модификации:
- ПКМ на запросе → Breakpoints
- Когда запрос попадает на breakpoint:
- Модифицируй URL, headers, body
- Нажми Execute для продолжения
Rewrite Tool
Автоматические модификации:
- Tools → Rewrite
- Настрой правило:
- Location:
api.example.com - Type: Modify Header / Body / URL
- Match и Replace значения
- Location:
Пример — добавить auth header:
Type: Add Header
Where: Request
Header Name: Authorization
Header Value: Bearer test-token-123
Мокание ответов
Map Local
Возвращай локальный файл вместо ответа сервера:
- ПКМ на запросе → Map Local
- Выбери локальный файл (JSON, HTML)
- Все совпадающие запросы вернут твой файл
// mock-user.json
{
"id": 1,
"name": "Test User",
"role": "admin"
}
Map Remote
Перенаправляй запросы на другой сервер:
- Tools → Map Remote
- Map from:
https://api.example.com/* - Map to:
https://staging.example.com/*
Троттлинг сети
- Proxy → Throttle Settings
- Включи Throttling
- Выбери пресет или настрой:
Среди пресетов — 56k Modem, 3G и 4G. Согласно официальной документации по троттлингу, пропускную способность можно ограничить любым значением в байтах в секунду, а задержку (latency) — любым числом миллисекунд, так что собственными значениями можно смоделировать любую скорость соединения.
Типичные сценарии тестирования
Тестирование обработки ошибок
// error-500.json
{
"error": "Internal Server Error",
"code": 500
}
Тестирование таймаутов
- Включи Throttling
- Установи очень высокую latency (30000ms)
- Наблюдай обработку таймаута
Тестирование пустых состояний
// empty-list.json
{
"items": [],
"total": 0
}
Charles Proxy с помощью ИИ
Что ИИ делает хорошо:
- Объяснять HTTP статус-коды и headers
- Генерировать mock JSON-ответы
- Конвертировать cURL в код
- Анализировать паттерны трафика
Что требует людей:
- Определять какой трафик важен
- Понимать бизнес-контекст данных
- Последствия для безопасности
- Решения о тестировании на реальных устройствах
FAQ
Что такое Charles Proxy?
Charles Proxy — это HTTP proxy и монитор. Он находится между приложением и интернетом, захватывая весь HTTP и HTTPS трафик для инспекции и модификации. Тестировщики используют его для отладки API, мокания ответов сервера, симуляции сетевых условий и понимания коммуникации приложений с бэкендами.
Charles Proxy бесплатный?
Нет, Charles — платная программа. Её можно пробовать 30 дней до покупки, одна лицензия стоит USD $50 (на сентябрь 2026 года). Лицензия действует для текущей мажорной версии Charles; подробности — на официальной странице цен. Бесплатные альтернативы: mitmproxy (командная строка, open source), Proxyman (macOS native), и DevTools браузера для базовой инспекции.
Как использовать Charles с мобильными приложениями?
Настрой WiFi proxy на мобильном устройстве на IP компьютера и порт Charles (8888). Оба устройства должны быть в одной сети. Для HTTPS установи SSL-сертификат Charles на устройство. Android 7+ приложениям может потребоваться дополнительная конфигурация для доверия пользовательским сертификатам.
Может ли Charles модифицировать API-ответы?
Да. Charles предлагает несколько вариантов: Breakpoints для редактирования в реальном времени, Map Local для возврата локальных файлов, Map Remote для перенаправления на другие серверы и Rewrite правила для автоматической модификации headers/body.
Официальные ресурсы
Смотрите также
- API Testing Tutorial - Основы тестирования API
- Appium Tutorial - Автоматизация мобильного тестирования
- Postman Tutorial - Инструмент тестирования API
- API Security Testing - Основы тестирования безопасности
