Інтеграція Charles Proxy / Proxyman для налагодження мережевих запитів мобільного додатку
Без proxy-інструменту налагодження мережевого шару зводиться до print(response) у коді та надіївся побачити щось. Charles Proxy та Proxyman перехоплюють весь трафік пристрою: видно реальні заголовки, тіла запитів і відповідей, час, переспрямування, вебсокети. Це стандартний інструмент для налагодження та тестування API-інтеграцій.
Налаштування Charles Proxy
Установлення кореневого сертифіката на iOS:
- Charles: Help → SSL Proxying → Install Charles Root Certificate on iOS Simulator / Mobile Device
- На пристрої — Settings → General → VPN & Device Management → установити профіль
- Settings → General → About → Certificate Trust Settings → включити довіру до Charles Proxy CA
Після цього Charles бачить HTTPS-трафік. Без довіри до сертифіката видні лише метадані, тіло залишається зашифрованим.
Налаштування Wi-Fi proxy на пристрої: той же Wi-Fi, що на Mac → Manual proxy → IP-адреса Mac, порт 8888 (стандартно для Charles).
SSL Proxying List у Charles: за замовчуванням розшифровуються не всі домени — потрібно додати * або конкретні хости через Proxy → SSL Proxying Settings → Include.
Proxyman як альтернатива
Proxyman — це більш сучасний macOS-інструмент з нативним SwiftUI інтерфейсом. Налаштовується швидше, має чистіший UI, краще працює з WebSocket і HTTP/2. Підтримує автоматичну установку сертифіката через Proxyman Certificate Assistant — кілька кліків замість ручного установлення профілю.
Ключові функції Proxyman:
- Script editor: перехопіть запит/відповідь і модифікуйте через JavaScript (імітація backend-відповідей без змін сервера)
- Breakpoints: зупиніть запит перед відправленням, редагуйте, продовжуйте
- Map Local / Map Remote: переспрямування запитів на інший URL або на локальний файл (моквання)
Робота з Certificate Pinning
Якщо додаток використовує 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 (куди додається сертифікат Charles/Proxyman), у release — ні.
Типові сценарії використання
- Перевірка коректності заголовків авторизації (Bearer token, API key)
- Налагодження завантаження файлів multipart/form-data
- Тестування поведінки при повільному з'єднанні (throttling у Charles: Proxy → Throttle Settings)
- Перевірка обробки помилкових HTTP-відповідей (Map Local → підставити 500 відповідь)
- Налагодження GraphQL запитів і WebSocket-фреймів
Терміни
Налаштування Charles або Proxyman під конкретний проект, включаючи SSL-сертифікати, debug-конфіг безпеки мережі та документацію для команди — 4 години–1 день.







