Charles Proxy — це кроссплатформений проксі-сервер для налагодження HTTP/HTTPS-трафіку, який використовується розробниками для перехоплення, перегляду та модифікації мережевих запитів. За даними Karl von Randow, творця інструменту (2025), Charles використовується більш ніж у 50 000 компаній по всьому світу з 2004 року. Проксі підтримує перехоплення трафіку з мобільних пристроїв через WiFi, HTTPS-проксіювання зі встановленням кореневого сертифіката та широкий набір інструментів для аналізу API.
Головне
Charles Proxy — це HTTP-проксі та HTTP-монітор, який працює як посередник між клієнтом і сервером. Всі запити та відповіді проходять через Charles, що дозволяє переглядати їхній вміст, аналізувати структуру, змінювати дані в реальному часі та імітувати різні мережеві умови. Доступний для Windows, macOS та Linux.
Charles Proxy був створений у 2004 році Карлом фон Рендоу і залишається одним із найпопулярніших інструментів для налагодження мережевого трафіку. На відміну від безкоштовних альтернатив, Charles пропонує платну ліцензію з 30-денним пробним періодом. Інструмент позиціонується як професійне рішення для розробників мобільних додатків, веб-розробників та QA-інженерів, яким потрібен повний контроль над HTTP-комунікаціями.
Charles працює як системний проксі на комп'ютері та може перехоплювати трафік з будь-яких пристроїв в одній мережі: Android, iOS, симуляторів, емуляторів, веб-браузерів та IoT-пристроїв. Для перехоплення HTTPS необхідно встановити кореневий сертифікат Charles на кожен пристрій. Трафік підтримується на HTTP/1.1 та HTTP/2 (частково). HTTP/3 (QUIC) не підтримується на рівні перехоплення.
Charles працює за принципом MITM (Man-in-the-Middle) проксі: коли клієнт надсилає запит через Charles, інструмент перехоплює цей запит, перенаправляє на цільовий сервер, отримує відповідь і передає її назад клієнту. Весь трафік проходить через Charles, що дозволяє його аналізувати та модифікувати.
При запуску Charles створює локальний HTTP-проксі на порту 8888 (за замовчуванням). Операційна система або додаток налаштовується на використання цього проксі. Всі HTTP-запити надсилаються спочатку на Charles, який потім діє як повноцінний клієнт для цільового сервера. Для HTTPS Charles використовує власну техніку SSL-проксіювання: він генерує сертифікат на льоту для кожного домену, підписаний кореневим сертифікатом Charles. Якщо кореневий сертифікат встановлено на пристрої як довірений, Charles може розшифровувати та переглядати HTTPS-трафік.
Charles підтримує два режими: Proxy(класичний проксі-сервер) та SOCKS Proxy(для UDP та TCP-трафіку). Для веб-розробки використовується стандартний HTTP-proxy. Для мобільних пристроїв — налаштування WiFi Proxy на пристрої із зазначенням IP-адреси комп'ютера, на якому запущено Charles. macOS підтримує автоматичне налаштування проксі для симулятора iOS.
<!-- Налаштування network_security_config.xml для Android з підтримкою Charles -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Довіряти сертифікату Charles у Debug-збірці -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy надає набір професійних інструментів для аналізу та модифікації трафіку, що виходить далеко за межі простого перехоплення запитів.
Інструмент Rewrite дозволяє автоматично змінювати певні частини запитів або відповідей: заголовки, параметри URL, тіло відповіді. Наприклад, можна замінити заголовок User-Agent на значення від іншого пристрою або прибрати певні cookies. Breakpoints працюють як відладчик: запит зупиняється на вибраному етапі (перед надсиланням або перед отриманням), і розробник може вручну змінити його вміст до того, як він піде далі. Це корисно для тестування обробки помилкових відповідей або нестандартних станів.
Map Local дозволяє підмінити мережевий ресурс (CSS, JS, JSON) на локальний файл з диска. Це незамінно при розробці фронтенду: можна змінювати CSS/JS і одразу бачити результат, не деплоячи на сервер. Map Remote перенаправляє запити з одного URL на інший — наприклад, з продакшен-сервера на staging для тестування. Обидва інструменти працюють за шаблонами URL з підтримкою wildcards.
Інструмент Throttle дозволяє імітувати різні типи мережевих з'єднань за попередньо встановленими профілями: 3G, EDGE, GPRS, DSL, WiFi. Можна налаштувати обмеження швидкості (download/upload), latency, packet loss та stability. Це критично важливо для тестування поведінки додатка при повільному або нестабільному з'єднанні — правильна обробка таймаутів, повторні спроби, офлайн-режим.
| Профіль | Download | Upload | Latency | Типовий сценарій |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Тестування при слабкому мобільному сигналі |
| EDGE | 130 kbps | 50 kbps | 400 ms | Екстремально повільне з'єднання |
| GPRS | 50 kbps | 20 kbps | 500 ms | Мінімально можливе з'єднання |
| DSL | 2 Mbps | 256 kbps | 50 ms | Домашнє дротове з'єднання |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | Хороше WiFi-з'єднання |
Charles може автоматично зберігати сесії трафіку у файли .chls, що дозволяє аналізувати їх пізніше або передавати колегам. Recording Control дозволяє гнучко налаштувати, який трафік зберігати: за доменами, за типами контенту, за статус-кодами. Це зручно для довгострокового моніторингу роботи API.
Для налагодження трафіку мобільних додатків Charles налаштовується як WiFi Proxy: всі пристрої в одній мережі з комп'ютером можуть направляти трафік через Charles. Коректне налаштування HTTPS вимагає встановлення сертифіката Charles на мобільний пристрій.
Для Android необхідно: відкрити Settings → WiFi → Advanced → Proxy, вибрати Manual та вказати IP-адресу комп'ютера з портом 8888. Після цього відкрити браузер на пристрої та перейти за адресою http://chls.pro/ssl для завантаження сертифіката Charles. На Android 7+ (API 24+) потрібен network_security_config.xml для довіри користувацьким сертифікатам у Debug-збірці — інакше додаток може не пропускати трафік через Charles.
Для iOS: Settings → WiFi → налаштувати проксі на IP та порт 8888. Потім Safari → http://chls.pro/ssl → встановити профіль сертифіката. В iOS 10.3+ необхідно додатково увімкнути довіру сертифікату: Settings → General → About → Certificate Trust Settings → увімкнути Charles Proxy. iOS більш суворий щодо сертифікатів: деякі додатки можуть використовувати SSL Pinning, блокуючи трафік через Charles навіть із довіреним сертифікатом.
Якщо додаток використовує SSL Pinning(фіксацію сертифіката сервера), стандартне проксіювання через Charles не спрацює — додаток відхилить сертифікат Charles. Рішення: вимкнути SSL Pinning у Debug-збірці через налаштування OkHttp або URLSession, використовувати Frida для обходу pinning у runtime, або застосовувати Android Emulator з кореневим доступом.
Charles Proxy вирішує конкретні завдання розробки та тестування. Розглянемо найпоширеніші сценарії, де інструмент незамінний.
Найпоширеніший сценарій — перевірка коректності API-запитів. Charles показує точний URL запиту, заголовки, тіло, параметри. Якщо сервер повертає неочікувану відповідь, одразу видно: структуру JSON, код помилки, заголовки відповіді. Це дозволяє відрізнити помилку на клієнті від помилки на сервері без логів з обох сторін.
Використовуючи профілі Throttle, можна перевірити, як додаток поводиться при низькій швидкості з'єднання: чи відображається індикатор завантаження, чи коректно обробляється таймаут, чи не зависає UI при втраті з'єднання. Особливо важливо тестувати кешування — якщо дані вже завантажені, додаток повинен показувати їх з кешу, а не йти в нескінченне завантаження.
За допомогою Breakpoints можна змінити відповідь сервера перед його надсиланням додатку. Наприклад, повернути порожній масив замість даних, змінити статус-код на 500, додати в JSON нове поле. Це дозволяє перевірити обробку граничних випадків без модифікації серверного коду — один із найпотужніших застосунків Charles у мобільній розробці.
Часті запитання
Charles Proxy є комерційним продуктом з 30-денним пробним періодом. Після закінчення пробного періоду програма продовжує працювати з перервою в 30 хвилин при кожному запуску. Вартість ліцензії — $50 за одну копію. Існують безкоштовні альтернативи, такі як Proxyman (macOS) та mitmproxy (кроссплатформений).
Так, iOS симулятор автоматично використовує системний проксі macOS. Достатньо запустити Charles та увімкнути SSL-проксіювання — весь трафік симулятора буде перехоплено. Налаштування сертифіката для симулятора відбувається автоматично, потрібно лише довірити сертифікат Charles у зв'язці ключів macOS.
Основні відмінності: Charles — кроссплатформений (Windows, macOS, Linux), Proxyman — тільки macOS та iOS. Charles має ширший набір інструментів (Rewrite, Map Local, Repeat, Auto Save), але платний. Proxyman — безкоштовний для базового функціоналу, з сучасним інтерфейсом та нативною інтеграцією з iOS-симулятором.
Charles додає затримку при проходженні трафіку через проксі, особливо при активному SSL-проксіюванні (дешифровка/зашифровка). На сучасних комп'ютерах затримка становить 5–15 мілісекунд на запит. Для тестів продуктивності рекомендується вимикати SSL-проксіювання для статики (CSS, JS, зображення) через Recording Control.
Charles підтримує експорт у формати: .chls(власний, для повторного відкриття в Charles), HAR(HTTP Archive, відкривається в браузерах та інших інструментах), CSV(для обробки в Excel або таблицях), Trace(для експорту конкретного запиту в curl-сумісному форматі). Експорт через меню File → Export Session.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також