Как с помощью Charles Proxy можно изменять параметры сетевых запросов и ответов?

Ответ

Charles Proxy предоставляет несколько ключевых функций для модификации сетевого трафика:

Основные инструменты:

  • Breakpoints (Точки останова): Позволяют перехватить запрос или ответ перед его отправкой/получением, вручную изменить данные и продолжить выполнение.
    • Пример: Изменить user_id в теле POST-запроса или статус-код в ответе сервера.
  • Map Local / Map Remote:
    • Map Local: Заменяет ответ от удаленного сервера содержимым локального файла (например, JSON). Используется для тестирования различных сценариев ответа API.
    • Map Remote: Перенаправляет запросы с одного URL на другой, что полезно для тестирования с разными окружениями.
  • Rewrite Rules: Автоматическое изменение запросов и ответов на основе заранее заданных правил (поиск и замена).
  • Throttling (Ограничение скорости): Эмуляция медленных сетевых условий (2G, 3G) для проверки поведения приложения.

Пример скрипта (Charles Proxy Local Rewrite) для добавления параметра отладки:

// Этот скрипт добавит параметр debug=true ко всем запросам к api.example.com
if (oRequest.host().contains("api.example.com")) {
    oRequest.url().addQueryParameter("debug", "true");
}

Важно: Для перехвата HTTPS-трафика необходимо установить корневой сертификат Charles на тестовое устройство или в эмулятор.

Ответ 18+ 🔞

А, Чарльз Прокси, ну это ж, блядь, такая штука, которая как хирургический скальпель для твоего сетевого говна! Сидишь, смотришь, что туда-сюда ползает, и можешь его, сука, на лету менять. Во какие дела, блядь!

Вот его главные плюшки, на которые стоит смотреть:

  • Breakpoints (Точки останова): Это когда ты, сука, как милиционер на трассе — останавливаешь запрос или ответ, пока он не доехал. Останавливаешь, ковыряешься в его багажнике, подкидываешь туда свою хуйню или выкидываешь чужую, и потом отпускаешь дальше.
    • Например: Хочешь проверить, как твоё приложение отреагирует, если сервер вместо "status": "ok" пришлёт "status": "ты пидор". Ставишь брейкпоинт на ответ, меняешь, и смотришь, не развалится ли всё к ебеням.
  • Map Local / Map Remote:
    • Map Local: Это, блядь, волшебство! Серверу нахуй не нужен. Ты говоришь Чарльзу: «Слышь, чувак, когда к тебе придут за таким-то JSON'ом, не ходи в интернет, на, вот, возьми этот файлик с диска». Идеально, чтобы подсунуть приложению любой, даже самый ебнутый, ответ для теста.
    • Map Remote: А это чтобы запросы, которые шли на prod.superapp.com, незаметно перенаправить на test.superapp.local:8080. Типа, «ребята, вы думаете, что вы в бою, а вы, блядь, на моём локальном стенде».
  • Rewrite Rules: Автоматическая замена по правилам. Сказал один раз: «Везде, где встречается "v1", меняй на "v2"» — и он, сука, сам всё сделает. Лень — двигатель прогресса, ёпта!
  • Throttling (Ограничение скорости): Эмулирует интернет твоей бабушки в деревне. Включаешь «Эмуляцию 2G» и смотришь, как твоё супер-пупер приложение, которое на гигабите летает, превращается в груду тормозящего говна. Очень отрезвляет, блядь!

Вот тебе кусочек кода, чтобы Чарльз сам ко всем запросам прикручивал отладочный параметр:

// Этот скрипт добавит параметр debug=true ко всем запросам к api.example.com
if (oRequest.host().contains("api.example.com")) {
    oRequest.url().addQueryParameter("debug", "true");
}

И главное, блядь, предупреждение! Чтобы он мог читать твой зашифрованный HTTPS-трафик (а не просто смотреть на абракадабру), нужно поставить его корневой сертификат себе в доверенные. На телефон, на комп, в эмулятор — куда нужно. Без этого — нихуя не увидишь, только обычный HTTP. Так что не забудь, а то будешь потом чесать репу, почему у тебя ничего не перехватывается!