Урок 17. Charles Proxy / Сниффер
Перехват и анализ запросов
Темы урока
Прокси-сервер и сниффер, Charles установка/настройка, HTTPS перехват, Breakpoints, Map Local/Remote, Throttling
Видео урока
Конспект урока
Главное за урок
Charles Proxy — это посредник между клиентом и сервером. Он перехватывает весь трафик: заголовки, тела запросов и ответов, статус-коды, тайминги — всё в читаемом виде, включая HTTPS после настройки SSL Proxying.
DevTools показывает только то, что браузер решил показать. Charles видит весь трафик системы — мобильные приложения, нативные клиенты, фоновые процессы. Там, куда DevTools не дотягивается.
Подмена данных без доступа к коду — главная суперсила сниффера. Breakpoints, Map Local, Map Remote позволяют тестировать граничные случаи и edge cases без разработчика и без тестового сервера.
Как работает прокси
Charles встаёт в цепочку между клиентом и сервером:
Без прокси: Браузер → Сервер → Браузер
С Charles: Браузер → Charles → Сервер → Charles → Браузер
Charles получает копию каждого запроса и ответа. Ничего не блокирует, просто наблюдает (если не включены Breakpoints).
Два режима просмотра:
- Structure view — дерево хостов и эндпоинтов, удобно для фильтрации по домену
- Sequence view — хронологический список с временными метками, удобно для анализа потока запросов
SSL Proxying — перехват HTTPS
По умолчанию Charles видит HTTPS как зашифрованный туннель — тело и заголовки скрыты, отображается <encrypted>.
Как включить:
- Help → SSL Proxying → Install Charles Root Certificate → доверяем сертификату в Связке ключей
- Proxy → SSL Proxying Settings → Add → Host:
*(или конкретный домен, напримерaiqa.su) - Перезагружаем страницу — теперь HTTPS расшифрован
Charles расшифровывает трафик на лету и снова шифрует перед отправкой серверу. Сервер ничего не замечает.
Сертификат Charles нужен только для HTTPS. Для HTTP он не нужен.
Breakpoints — перехват на лету
Breakpoints останавливают запрос или ответ и дают возможность отредактировать его до отправки дальше.
Работают в обе стороны:
- На запрос — перехватывается до отправки серверу; можно изменить тело, заголовки, метод
- На ответ — перехватывается до получения клиентом; можно подменить статус-код, тело ответа
Как поставить: правый клик на запросе → Breakpoint. При следующем срабатывании — диалог с редактором → Execute.
Зачем нужно:
- Проверять граничные значения (quantity: 999, цена: -1)
- Тестировать реакцию UI на ошибки (503, 404, 500) без доступа к серверу
- Проверять, как фронтенд обрабатывает неожиданные данные
Map Local и Map Remote
В отличие от Breakpoints, Map Local и Map Remote работают постоянно — правило срабатывает автоматически при каждом запросе, пока активно.
Map Local
Каждый запрос к URL возвращает содержимое локального файла вместо реального ответа сервера.
Как использовать:
- Правый клик на запросе → Save Response — сохраняем оригинальный JSON
- Редактируем файл: меняем данные под нужный сценарий
- Tools → Map Local → Add → указываем URL и путь к файлу
Когда удобно: воспроизвести баг с конкретными данными, проверить UI с пустым ответом, edge cases.
Map Remote
Запросы к одному URL автоматически перенаправляются на другой.
Как использовать: Tools → Map Remote → Add → From (оригинальный URL) → To (целевой URL).
Когда удобно: сравнить поведение prod и staging, протестировать фронтенд с другим бэкендом без переконфигурации приложения.
| Breakpoints | Map Local | Map Remote | |
|---|---|---|---|
| Активация | Вручную при каждом запросе | Автоматически | Автоматически |
| Что делает | Редактируешь запрос/ответ на лету | Отдаёт локальный файл | Перенаправляет на другой URL |
| Когда удобно | Разовые проверки | Стабильные подмены данных | Сравнение сред |
Throttling — симуляция медленной сети
Throttling имитирует разные сетевые условия: мобильный интернет, EDGE, 3G, нестабильное соединение.
Как включить: Proxy → Throttle Settings → выбрать профиль (EDGE: 240 Kbps, 500 мс задержка) → Proxy → Enable Throttling.
Что проверять:
- Появляются ли спиннеры загрузки
- Не падает ли приложение при таймаутах
- Нет ли race conditions при медленных ответах
- Отображается ли сообщение об ошибке при превышении таймаута
Charles vs DevTools Throttling
| DevTools | Charles | |
|---|---|---|
| Установка | Встроен в браузер, ноль настройки | Требует установки и сертификата |
| Область видимости | Только текущая вкладка браузера | Весь трафик системы |
| Мобильные устройства | Нет | Да (через настройку прокси на телефоне) |
| Когда выбирать | Веб-тестирование, быстро | Мобильные приложения, нативные клиенты |
Тренажёр Charles Lab
Все 7 упражнений урока построены на реальном API «Пиццаеда»: aiqa.su/base/charles-lab
| Упражнение | Тема | Что делаем |
|---|---|---|
| 1 | SSL Proxying | Настраиваем перехват HTTPS для aiqa.su, смотрим ответ GET /products |
| 2 | Анализ ответа | Изучаем структуру JSON, находим самый дорогой товар |
| 3 | Breakpoints (запрос) | Меняем quantity: 1 → 999 в POST /cart, проверяем статус-код |
| 4 | Breakpoints (ответ) | Подменяем статус 200 → 503 у GET /products, смотрим реакцию UI |
| 5 | Map Local | Сохраняем /products, меняем все цены на 1, подменяем ответ |
| 6 | Map Remote | Перенаправляем /products на /products?env=staging |
| 7 | Throttling | Измеряем Duration POST /cart до и после включения EDGE |
Домашнее задание урока 17
Пройди все 7 упражнений в Charles Lab: aiqa.su/base/charles-lab
У каждого упражнения есть пошаговая инструкция и вопрос с объяснением ответа.
Опубликуй итоги в чат по шаблону:
ДЗ 17 — Charles Lab
1. SSL Proxying: total в ответе GET /products → [число]
2. Самый дорогой товар → [название] — [цена] ₽
3. Breakpoints (запрос): статус-код на quantity: 999 → [код]
4. Breakpoints (ответ): что показал UI при статусе 503 → [описание]
5. Map Local: что отобразилось в карточках → [описание]
6. Map Remote: что изменилось в названиях → [описание]
7. Throttling: Duration запроса на EDGE → [мс]
Сдавать в чат марафона: https://t.me/+-utD4gcZaG82MTky
Ключевые тезисы для теста
- Charles Proxy — посредник между клиентом и сервером; перехватывает весь трафик системы, включая мобильные приложения.
- SSL Proxying — нужен для расшифровки HTTPS; требует установки корневого сертификата Charles и добавления хоста в SSL Proxying Settings.
- Breakpoints — разовый перехват на лету; работают на запрос и на ответ; нужен клик при каждом срабатывании.
- Map Local — постоянная подмена: запрос → локальный файл; удобно для стабильных edge cases.
- Map Remote — постоянное перенаправление: запрос идёт на другой URL; удобно для сравнения сред.
- Throttling — имитация медленной сети; проверяет поведение UI при задержках и таймаутах.
- Charles vs DevTools: DevTools — только браузер и текущая вкладка; Charles — весь системный трафик, включая мобильные устройства.
- Без SSL Proxying Charles видит HTTPS как
<encrypted>— тело и заголовки недоступны.
Полезные ссылки
- Тренажёр Charles Lab: aiqa.su/base/charles-lab
- Учебный магазин «Пиццаед»: aiqa.su/base/shop
- Официальный сайт Charles: https://www.charlesproxy.com/
- Статья на Habr — Charles Proxy: https://habr.com/ru/articles/chpxy/
- Эфиры Сергея на YouTube: https://www.youtube.com/@qabigtech/streams
- Чат марафона: https://t.me/+-utD4gcZaG82MTky
- Telegram-канал Сергея: https://t.me/qabigtech