Charles Proxy — это инструмент для отладки HTTP-запросов, функционирующий как локальный HTTP/HTTPS-прокси, позволяющий разработчикам и тестировщикам перехватывать, просматривать, изменять и анализировать весь сетевой трафик между их устройством и интернетом.
Обзор Charles Proxy
Charles Proxy предоставляет графический интерфейс для анализа сетевых взаимодействий, делая его незаменимым при разработке и отладке веб-приложений, мобильных приложений и API. Он работает как посредник между вашим браузером/приложением и целевым сервером, перехватывая весь трафик и представляя его в удобном для анализа виде.
Ключевые возможности
Charles Proxy предлагает набор функций для глубокого анализа и манипуляции сетевым трафиком:
- HTTP/HTTPS Proxying: Перехват и отображение всего HTTP и HTTPS трафика.
- SSL Proxying: Расшифровка HTTPS трафика для его просмотра, что критично при работе с защищенными соединениями.
- View Requests and Responses: Детальный просмотр заголовков, тела запросов и ответов, а также информации о времени и статусе.
- Throttling: Имитация различных сетевых условий (например, 3G, Dial-up, кастомные скорости) для тестирования производительности приложений в условиях медленного соединения.
- Rewriting: Изменение запросов или ответов "на лету" (заголовки, URL, параметры, тело) без изменения исходного кода клиента или сервера.
- Map Local/Remote: Перенаправление запросов на локальные файлы или другие удаленные серверы, что удобно для тестирования изменений без развертывания.
- Breakpoints: Приостановка запроса или ответа перед его отправкой или получением, позволяя вручную изменить его содержимое.
- Repeat: Повторное выполнение выбранного запроса для проверки различных сценариев.
- Filtering: Мощные инструменты для фильтрации трафика по хосту, пути, заголовкам или содержимому.
- Export/Import: Сохранение сессий трафика для последующего анализа или обмена с командой.
Настройка и использование Charles Proxy
Установка
Charles Proxy доступен для macOS, Windows и Linux. Загрузите установочный файл с официального сайта и следуйте инструкциям для вашей операционной системы. После установки Charles автоматически настраивает системные настройки прокси для перехвата трафика с вашего компьютера.
Базовая конфигурация прокси
При первом запуске Charles автоматически предлагает настроить системный прокси. Подтвердите это действие.
Для ручной настройки:
- macOS:
System Settings>Network>[Ваш сетевой адаптер]>Details>Proxies. Убедитесь, чтоWeb Proxy (HTTP)иSecure Web Proxy (HTTPS)включены и указывают на127.0.0.1порт8888. - Windows:
Settings>Network & internet>Proxy. Убедитесь, чтоUse a proxy serverвключен, адрес127.0.0.1, порт8888. - Браузеры: Некоторые браузеры (например, Firefox) могут использовать собственные настройки прокси. Убедитесь, что они настроены на использование системных настроек или вручную укажите
127.0.0.1:8888.
Перехват HTTP-трафика
После запуска и настройки прокси, Charles начнет автоматически записывать весь HTTP-трафик, проходящий через вашу систему. Трафик отображается в окне Structure (структурированное дерево хостов) или Sequence (хронологический список запросов).
SSL Proxying (HTTPS-трафик)
Для просмотра содержимого HTTPS-трафика необходимо установить корневой сертификат Charles Proxy и включить SSL Proxying для интересующих хостов.
-
Установка корневого сертификата:
- Для вашего компьютера: Перейдите в меню
Help>SSL Proxying>Install Charles Root Certificate(для macOS) илиInstall Charles Root Certificate on a Mobile Device or Remote Browser(для других ОС, следуйте инструкциям). - Для мобильных устройств:
- Убедитесь, что ваше мобильное устройство настроено на использование Charles как прокси. IP-адрес вашего компьютера и порт 8888.
- На мобильном устройстве откройте браузер и перейдите по адресу
chls.pro/ssl. - Загрузите и установите сертификат. Возможно, потребуется вручную доверять сертификату в настройках безопасности устройства.
- iOS:
Settings>General>About>Certificate Trust Settings(включить доверие для Charles Proxy CA). - Android: Процесс может варьироваться, часто требуется установить сертификат из загрузок, а затем настроить его как доверенный пользовательский сертификат.
- iOS:
- Для вашего компьютера: Перейдите в меню
-
Включение SSL Proxying для хостов:
- В Charles перейдите в меню
Proxy>SSL Proxying Settings.... - На вкладке
SSL ProxyingнажмитеAdd. - В полях
HostиPortукажите хост и порт, трафик которого вы хотите расшифровать (например,api.example.comи443). Вы можете использовать*для порта, если не уверены. - Добавьте все необходимые хосты.
- В Charles перейдите в меню
Просмотр и анализ запросов/ответов
После перехвата трафика вы можете выбрать любой запрос в панели Sequence или Structure для детального просмотра:
- Overview: Общая информация о запросе и ответе.
- Contents: Содержимое запроса и ответа (заголовки, текст, JSON, XML, изображения). Charles автоматически форматирует JSON и XML.
- Headers: Детальный просмотр HTTP-заголовков.
- Query: Параметры запроса (для GET-запросов).
- Form: Параметры формы (для POST-запросов).
// Пример отформатированного JSON-ответа в Charles
{
"status": "success",
"data": {
"userId": 123,
"username": "testuser",
"email": "test@example.com",
"roles": ["admin", "user"]
},
"timestamp": "2023-10-27T10:00:00Z"
}
Продвинутые техники отладки
Rewriting (Перезапись)
Функция Rewriting позволяет изменять запросы или ответы "на лету". Это полезно для:
- Изменения заголовков (например, добавление авторизационного токена).
- Изменения параметров URL.
- Модификации тела запроса или ответа.
Пример: Изменение заголовка ответа
- Перейдите в меню
Tools>Rewrite.... - Включите
Enable Rewrite. - Нажмите
Addдля создания нового набора правил. - На вкладке
Includeдобавьте хост и путь, для которого вы хотите применить правила (например,api.example.comи/users/*). - На вкладке
RulesнажмитеAdd. - Выберите
Type: Add Header. - В
WhereвыберитеResponse. - Укажите
Name: X-Custom-Header,Value: Debug-Mode-Active. - Нажмите
OKиOK. Теперь каждый ответ отapi.example.com/users/*будет содержать этот заголовок.
Map Local (Картирование на локальный файл)
Map Local позволяет перенаправлять запросы на локальные файлы. Это удобно для:
- Разработки фронтенда с использованием фиктивных (mock) данных.
- Тестирования изменений в API без изменения бэкенда.
Пример: Подмена ответа API локальным JSON-файлом
- Создайте JSON-файл на вашем компьютере (например,
mock_user_data.json) с желаемым содержимым.
json { "status": "mocked", "data": { "userId": 999, "username": "mockuser", "email": "mock@example.com" } } - В Charles перейдите в меню
Tools>Map Local.... - Включите
Enable Map Local. - Нажмите
Add. - В поле
Hostукажите хост API (например,api.example.com). - В поле
Pathукажите путь к ресурсу (например,/users/123). - В разделе
Local PathнажмитеChoose...и выберите вашmock_user_data.json. - Нажмите
OKиOK. Теперь запрос кapi.example.com/users/123будет возвращать содержимое вашего локального файла.
Throttling (Ограничение скорости)
Throttling позволяет имитировать различные сетевые условия, что критично для тестирования производительности и UX приложений.
- Перейдите в меню
Proxy>Throttling Settings.... - Включите
Enable Throttling. - Выберите предустановленный пресет (например,
3G) или настройте пользовательские параметрыBandwidth(пропускная способность) иLatency(задержка). - Вы можете применить throttling ко всем хостам (
Throttle All Hosts) или только к определенным (Only for specified hosts).
Breakpoints (Точки останова)
Breakpoints позволяют приостановить запрос перед его отправкой или ответ перед его получением, давая возможность вручную изменить содержимое.
- Перейдите в меню
Proxy>Breakpoint Settings.... - Включите
Enable Breakpoints. - Нажмите
Addи укажите хост и путь для запроса или ответа, который вы хотите перехватить. - Когда Charles перехватит соответствующий запрос/ответ, появится окно
Edit RequestилиEdit Response. - Внесите необходимые изменения и нажмите
Executeдля продолжения.
Фильтрация трафика
Для работы с большим объемом трафика эффективное использование фильтров является ключевым.
- Filter field: В нижней части окна Charles есть поле
Filter. Введите имя хоста или часть URL для отображения только соответствующего трафика. - Focus: Выберите хост в панели
Structure, затем кликните правой кнопкой мыши и выберитеFocus. Это скрывает весь трафик, кроме выбранного хоста. - Record Settings: В меню
Proxy>Recording Settings...можно указать, какие хосты включать или исключать из записи трафика.
// Пример использования поля Filter
api.example.com
/users
status:200
Распространенные сценарии использования
- Отладка API: Проверка правильности отправки запросов и получения ответов от сторонних API.
- Тестирование мобильных приложений: Анализ сетевых запросов, выполняемых мобильными приложениями, включая работу с push-уведомлениями и фоновыми задачами.
- Фронтенд-разработка: Мокирование API-ответов, изменение поведения сервера без изменения его кода.
- Тестирование производительности: Имитация медленного интернета для выявления проблем с загрузкой и отзывчивостью.
- Анализ безопасности: Проверка уязвимостей, таких как раскрытие конфиденциальных данных в незащищенных запросах.
Устранение неполадок
- "No traffic" (Нет трафика):
- Убедитесь, что Charles запущен и системный прокси настроен корректно.
- Проверьте, что в Charles включена запись трафика (красная кнопка
Recordв панели инструментов). - Если используете Firefox, убедитесь, что его настройки прокси указывают на системные или на Charles вручную.
- SSL Handshake Failed (Ошибка рукопожатия SSL):
- Проверьте, установлен ли корневой сертификат Charles на вашем устройстве.
- Убедитесь, что для нужного хоста включен SSL Proxying в
Proxy>SSL Proxying Settings.... - Некоторые приложения могут использовать "certificate pinning", что препятствует перехвату HTTPS-трафика даже с установленным сертификатом Charles. В таких случаях Charles может быть бессилен без модификации приложения.
- Медленная работа Charles:
- Отключите запись трафика (
Record) когда она не нужна. - Используйте
Recording Settingsдля исключения неинтересных хостов. - Очищайте сессии (
File>Clear Session) для освобождения памяти.
- Отключите запись трафика (