Начинающему QA: полезные функции снифферов на примере Charles Proxy
Снифферы — это инструменты, позволяющие перехватывать, анализировать и модернизировать все запросы, которые через них проходят. Они полезны, когда из потока нужно извлечь какие-либо сведения или создать нужный ответ сервера. Так можно проводить модульное тестирование продукта, в котором есть и бэк, и фронт, и разные команды со своей версионностью.
В этой статье я расскажу об основных функциях снифферов, которые могут быть полезны QA. Попробую не вдаваться в теорию, а сфокусироваться на практике. Наиболее популярными представителями анализаторов трафика сейчас являются WhireShark, Fiddler и Charles Proxy. Об удобстве интерфейсов и функционале каждого из них можно рассуждать долго, учитывая все плюсы и минусы. Но здесь я отдал предпочтение Charles, поскольку сам им активно пользуюсь. Буду рассказывать на его примере.
Что собой представляет Charles Proxy
Charles Web Debugging Proxy — это инструмент мониторинга HTTP и HTTPS трафика. Он выступает в роли прокси-сервера (промежуточного звена) между тестируемым приложением и сервером на бэкенде, позволяя не только видеть, но также перехватывать и редактировать запросы.
Главное преимущество Charles Proxy и снифферов в целом — возможность просмотра трафика, в том числе с мобильных устройств, что значительно облегчает работу тестировщика клиент-серверных мобильных приложений.
Первичная настройка
При тестировании мобильного приложения
Charles Proxy необходимо запустить на компьютере, который находится в той же локальной подсети, что и мобильное устройство с тестируемым приложением.
Как правило, соединение настраивается по Wi-Fi. В настройках Wi-Fi мобильного устройства в качестве proxy-сервера надо указать IP-адрес компьютера и стандартный порт инструмента 8888 (пароль остается пустым).
IP-адрес компьютера можно узнать через командную строку (ipconfig) или в самом Charles Proxy (Help -> Local IP Address).

Этот же адрес есть в инструкции по подключению, доступной в Help -> SSL Proxying -> Install Charles Root Certificate on mobile device remote browser.
После сохранения настроек Charles Proxy сможет читать HTTP-трафик мобильного устройства. Но чтобы смотреть расшифрованный трафик HTTPS, нужны дополнительные манипуляции — требуется установить SSL-сертификат Charles Proxy в браузере на мобильном устройстве.
Скачать сертификат можно по адресу: chls.pro/ssl (адрес, по которому скачивается сертификат, также можно найти в инструкции Help -> SSL Proxying -> Install Charles Root Certificate on mobile device remote browser). Далее в iOS его необходимо сделать доверенным (в Настройки -> Основные -> Профили).

В Android установленные сертификаты верифицируются в Settings -> Trusted Credentials на вкладке User.
Главное отличие в настройках для этой ОС в том, что с Android 6.0 и выше в Androidmanifest надо добавить специальную конфигурацию, позволяющую просматривать защищенный трафик. На продакшене эта конфигурация убирается из соображений безопасности.
При тестировании приложения на ПК
В этом случае дополнительные сертификаты нужно установить на сам ПК. Для скачивания и установки нужна ссылка из Help -> SSL Proxying -> Install Charles Root Certificate.

Сертификат устанавливается в доверенные корневые центры.
Два слова об интерфейсе

Интерфейс Charles Proxy прост. Слева — список перехваченных запросов, справа — детали.
В списке запросов есть две основные вкладки — Structure и Sequence.
В первом случае запросы рассортированы по хостам-папкам. Наведя на любой из них, можно получить всю информацию о количестве запросов к этому корневому хосту, доле удачных, таймингах, размерах и т.п. Фактически, здесь представлена вся та же информация, которую можно получить из панели разработчика в браузере. Выбрав конкретный URL, можно увидеть код ответа, версии протоколов, контент и т.п. Тело запроса, заголовки, cookie (если есть) можно посмотреть в разных форматах — даже в HEX.
С помощью контекстного меню запроса можно настраивать блокировки, повторять и изменять запросы. На этом мы еще остановимся.
На вкладке Sequence запросы выведены по времени в виде настраиваемой таблицы. Видно, когда начался запрос, сколько он длился, его размер, статус и т.п. Наведя на конкретную строку, мы получим ту же информацию о теле, заголовках и т.п.
Если запросов на экране слишком много, с помощью панели инструментов их можно очистить или вообще остановить перехват. Там же есть возможность включить и выключить троттлинг (подробнее об этих функциях расскажу позже). Базовая настройка каждой из функций осуществляется через меню, а кнопки панели управления выступают своего рода тумблерами On / Off.
Фильтрация
В Charles Proxy очень много вариантов фильтрации запросов.
Начнем с вкладки Structure. Самое примитивное — скопировать хост и вставить в поле Filter. Так мы увидим только запросы с этого хоста. Примерно того же результата можно добиться, если в контекстном меню хоста выбрать Focus. Остальные запросы будут собраны в Other Hosts. Если при этом перейти на закладку Sequence и отметить настройку Focused, то в списке окажется информация только о тех запросах, которые были выбраны на вкладке Structure.
На вкладке Sequence есть аналогичный фильтр.
Charles Proxy умеет работать с регулярными выражениями. Для этого на вкладке Sequence выбираем Settings и отмечаем пункт Filter uses regex. И вписываем в поле поиска элементарную регулярку.
Например, вот так
можно выбрать все запросы, в которых в начале имени хоста находится четыре буквы, а потом идет точка.
Там же можно включить Autoscroll списка запросов или указать максимальное количество строк.
В Charles Proxy можно фильтровать не только отображение, но и запись запросов. Для этого надо зайти в Proxy -> Record settings и задать условия на одной из вкладок — Include или Exclude — так мы включаем или выключаем запись запросов данного хоста.
Похожего результата можно добиться, используя блок-листы. Включить хост в блок лист можно из контекстного меню (команда Block list) или через добавление в Tools -> Block list, где следует отметить Enable Block list.
Блокируемый запрос можно прервать двумя способами (подходящий надо выбрать в настройках):
- сбросить соединение;
- вернуть ошибку 403.
От выбранного способа блокировки зависит, какой ответ мы получим.
Можно провести эксперимент. Включим наш тестовый стенд в Block list, выбрав простой сброс соединения. С помощью контекстного меню запроса повторим его (команда Repeat) и получим такой ответ:

Статус запроса — Failed, а в описании ошибки указано, что Connection dropped.
Просмотр SSL-трафика
Если ранее мы успешно установили SSL-сертификат, для просмотра зашифрованного трафика остается только включить SSL proxying для нужного хоста в самом Charles Proxy. Это можно сделать через контекстное меню конкретного хоста.

Чтобы не включать каждый хост, можно зайти в Proxy -> SSL Proxying settings и на первой вкладке SSL Proxying включить Enable SSL Proxying.
Аналогично настройке фильтров на вкладках Include и Exclude можно добавить или исключить конкретные хосты. Если списки на этих вкладках не заполнять, по умолчанию мы будем читать трафик со всех хостов.
Брейкпоинты
Наверное, одна из самых популярных функций Charles Proxy — это настройка точек остановки, которые позволяют перехватывать запросы.
Установить Breakpoint можно из контекстного меню запроса. После этого все аналогичные запросы будут перехвачены. Их можно будет просматривать и редактировать.

Чтобы проверить, как это работает можно использовать повтор запроса (Repeat из того же контекстного меню). Запрос перехватывается, его можно редактировать.
В принципе, изменить можно все — от header до авторизационного токена. Когда редактирование будет закончено, можно выбрать Execute и в Charles Proxy появится повторный запрос, который и отправится на сервер, а потом вернется с ответом. В этот момент можно будет посмотреть и отредактировать ответ, который получит приложение — появится поле Edit response.
Редактируя запрос, можно ввести заведомо некорректные данные и посмотреть, как ответит сервер. Также можно отредактировать ответ (внеся некорректные данные) и использовать его для тестирования фронта. Можно оставить корректные данные, но изменить код — посмотреть, как фронт воспринимает информацию, переданную через API.
Map remote
Еще одна популярная функция Charles Proxy — подмена ответа сервера. Так мы можем ответ одного хоста подменить на ответ другого. Настраивается это через Tools -> Map Remote.

Обратите внимание, в левом нижнем углу есть кнопки Import и Export. Они позволяют обмениваться настройками — переносить их с одного рабочего места на другое.
Например, мы можем подменить контура. Я буду посылать запрос на dev-контур, но ответ хочу получить с тестового стенда. Для этого создаем новый пункт в списке Map Remote Settings. Map From — куда изначально был запрос; Map to — откуда берем ответ.
Эта функция может быть полезна, если мы поймали ошибку на продакшене, например при загрузке таблицы, а информации в dev-контуре для полноценного тестирования не хватает. Вместо того, чтобы перезаполнять информацию в каждом контуре, мы можем скопировать ответ сервера в нужный контур и посмотреть, как он ведет себя после исправления ошибки.
Map Local
Главное отличие Map Local от предыдущей функции в том, что замена осуществляется не на ответ другого сервера, а на содержимое локального файла. Настройки выглядят точно также, но вместо второго сервера мы указываем локальный путь к файлу с ответом.
Rewrite
Функция Rewrite может быть полезна, если вам нужно переписать данные, которые отправляются в Charles Proxy. В отличие от простого редактирования Rewrite позволяет задать правила изменения и работать в автоматическом режиме. Можно изменять и добавлять заголовки, искать и заменять текст в теле запроса или ответа. Можно даже менять статус ответа.
Rewrite удобно использовать, когда нужен готовый ответ, но мы не хотим каждый раз ставить брейкпоинт и вписывать его в ручную. Редактируя таким образом ответ, фактически, мы ставим заглушку — можем имитировать работу сторонних партнеров. Честно говоря, в Postman-е эта функция реализована более интуитивно. Но раз мы говорим про Charles, не будем отходить от его примера.
Настроить это можно через Rewrite settings, доступные в контекстном меню. Единственный недостаток инструмента в том, что каждое правило замены прописывается отдельно.
Помимо изменения запросов и ответов мы можем запретить кэширование или cookie (функции No caching и Block cookies). Эти опции повторяют аналогичные инструменты панели разработчика в браузере. В обоих случаях настраивается список хостов, для которых действует настройка. Если же список пуст, то кэширование и cookie отключаются на всех перехваченных хостах.
Throttling
Charles Proxy помогает тестировать сервис на плохой связи, искусственно ограничив через настройки пропускную способность канала. Эта функция полезнее всего для тестирования десктопных приложений, поскольку на мобильных устройствах качеством связи можно управлять через панель разработчика.
Настраивается функция через Proxy ->Throttling settings.

Ограничения можно включить либо для хостов из списка, либо для всех перехваченных запросов. Из коробки есть несколько пресетов, но все параметры связи можно корректировать вручную. Мне по большей части хватает базовых настроек.
Repeat Advanced
Хотя полноценное нагрузочное тестирование лучше проводить в специальных инструментах, Charles Proxy имеет одну базовую настройку, которая помогает закрыть минимальные потребности. Функция Repeat Advanced (доступная через контекстное меню перехваченного запроса) позволяет нужное количество раз повторить тот же запрос. После настройки откроется отдельная сессия, где будут видны детали каждого из запросов.
Конечно, список функций Charles Proxy этим не ограничивается. Есть еще много полезного — от перенаправления доменного имени на другой IP-адрес, до автоматического сохранения полученных ответов.
Отмечу, что Charles Proxy платный. Можно использовать триальную версию. Но раз в 5-7 минут поверх него будет отображаться всплывающее окно с версией, а раз в 30 минут он будет выключаться, при этом сессии не сохраняются. Решайте сами, помешает ли это вашей работе.
В целом Charles Proxy — это хороший инструмент. Не сказал бы, что он сильно отличается от того же Fiddler-а, но на мой взгляд он больше заточен под MacOS, поскольку пришел на эту платформу раньше. Хотя сейчас уже нельзя сказать, что какой-то сниффер принципиально лучше или хуже. Все они решают примерно одни и те же задачи сходным образом.
Автор статьи: Артем Холевко, Максилект.
Текст подготовлен по материалам внутреннего семинара Максилект.
P.S. Мы публикуем наши статьи на нескольких площадках Рунета. Подписывайтесь на наши страницы в VK, FB, Instagram или Telegram-канал, чтобы узнавать обо всех наших публикациях и других новостях компании Maxilect.
- снифферы
- charlesproxy
- charles proxy
Charles Proxy на пальцах: главный помощник QA и разработчиков
Привет, меня зовут Света и я тимлид Mobile QA в Emerging Travel Group. В этой статье я простым языком расскажу про один из самых полезных и простых в использовании инструментов тестирования мобильных приложений — мистер Charles Proxy, и покажу на примерах некоторые самые полезные его функции.
Для начала разберёмся, кто вообще такой этот Charles.
Charles Proxy — это сниффер (sniffer – перехватчик) трафика, инструмент для анализа трафика, который позволяет отслеживать, записывать и анализировать сетевые запросы между устройствами и интернетом.
Charles — не единственный инструмент для анализа трафика, у него есть аналоги, например: WhireShark, Fiddler, Proхyman, mitmproxy. Все они в той или иной степени про одно, различие лишь в интерфейсе, поддержке разных платформ, и наборе функционала.
Установка и первичные настройки
Я распишу процесс для MacOS, однако для Windows он практически идентичен 🙂 Для использования Charles Proxy сначала нужно выполнить следующие шаги:
- Скачать и установить
- Дать Charles установить нужные настройки сети
- Настроить устройства и установить на них Charles SSL сертификат
Сначала скачайте Charles Proxy для MacOS.
После загрузки Charles установите его, открыв dmg и перетащив приложение в папку «Приложения».
Charles Proxy не бесплатен, но предоставляет 30-дневный trial из-за которого Charles будет работать только 30 минут и после этого его нужно перезагружать. Чтобы работа Charles стала полноценной нужно купить его лицензию. Лицензия бессрочная и распространяется на неограниченное количество устройств.
Настройка сети
Запустите Charles, при первом запуске появится попап о запросе разрешения на изменение сетевых настроек. Если он не появился, то нажмите Shift-Command-P и увидите следующее окно:

Нажмите “Grant Priveleges” и введите пароль от своего пользователя, если его запросят. После этого Charles начнёт показывать сетевые запросы, которые отправляет ваш Mac

Настройка реального устройства для работы с Charles Proxy
Для отслеживания трафика с реального устройства через Charles Proxy ваш Mac и устройство должны находиться в одной сети. При проксировании трафика от устройства в Charles Proxy необходимо установить Charles Root SSL Certificate для того чтобы можно было анализировать трафик. Для этого открываем Charles и в меню выбираем Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser

Теперь на устройстве открываем настройки WiFi -> Настройки выбранной сети -> Proxy Settings и вводим IP адрес и порт из окна чарльза:

И нажимаем “Save”.
Теперь нужно зайти в браузер и перейти на https://chls.pro/ssl и установить сертификат:

Нажимаем “Allow” и после этого видим попап о установленном configuration profile:

Теперь заходим в системное приложение Settings и там General -> Profile и нажимаем Charles Proxy CA.

Нажимаем “Install”, в появившемся окне ещё раз “Install” и после того как сертификат будет успешно установлен на экране должно быть примерно следующее:

И последнее! Теперь нужно зайти в приложение Settings, там в General -> About -> Certificate Trust Settings.

И здесь нужно включить свитчер Charles Proxy CA. На всплывающем окне нужно нажать “Continue”. Ура! Теперь установка сертификата завершена. Не волнуйтесь, эту настройку нужно делать только 1 раз на одном устройстве.
Краткий обзор интерфейса
Интерфейс Charles логичен и прост.
После того как мы настроили сертификат на устройстве, и включили запись запросов в Чарльзе, мы будем видеть абсолютно все запросы, которые отправляет приложение в сеть. Либо последовательно, либо структурно.

Как вы видите на скриншоте, слева у нас отображается список запросов, справа — информация о выбранном нами запросе. Остановить запись отправляемых запросов, чтобы не засорять список и не запутаться, можно нажав на красный кружочек
Далее, видим, что в верхней части экрана будет информация о request-части запросов, а в нижней — response-части.

Для примера я пока взяла рандомный запрос, далее рассмотрим подробнее на одном из приложений, с которыми я работаю.
При нажатии на один из запросов мы можем увидеть некоторые детали запроса, например, заголовки, тело и другое. Мы также можем увидеть ответ на данный запрос.
Однако, есть один нюанс: если запрос выполняется через HTTPS, мы не увидим никаких подробностей в этих запросах, по крайней мере пока не включим SSL-проксирование для определенного хоста или всех запросов, выполняемых приложением. После включения можно будет проверять содержимое этих запросов.
Как включить ssl-проксирование для интересного нам хоста?
Сharles > Proxy > SSL Proxying Settings…
Выбираем вкладку SSL Proxying, нажимаем на Add.

Вставляем интересующий нас хост (обратите внимание, только хост, без https и query-параметров), в моём случае это один из хостов приложения Dice и порт 443.
Теперь, когда я запущу на своём устройстве приложение Dice, я буду видеть все внутренности запросов с этого хоста
Теперь давайте перейдём непосредственно к нескольким функциям, которые сильно облегчают жизнь в разработке и тестировании.
Волшебные функции
1. Breakpoint
Breakpoint — дает возможность приостановить выполнение запроса или ответа на определенном этапе и проанализировать содержимое для того, чтобы можно было внести необходимые изменения и проверить как приложение или сервер отреагируют на внесённые нами изменения. Звучит, вероятно, слегка сложно, но на примере всё будет сильно понятнее.
Breakpoint можно использовать, чтобы изменить URL запроса на сервер, заменить один заголовок на другой, изменить содержимое тела запроса или ответа или добавить новый параметр в URL запроса.
Функция Breakpoint позволяет остановить выполнение на следующих этапах запроса или ответа:

- Запрос перед отправкой на сервер
- Ответ после получения от сервера
- Загрузка ресурсов (например, изображений или стилей) Рассмотрим на простом примере одного из приложений, с которыми я работаю: Пользователь забронировал себе трансфер. У нас есть экран подтверждения его бронирования, с данными, которые он указал. Что мы можем сделать с помощью брейкпоинта? Поменять практически любые данные, которые приходят в запросе для этого экрана, и посмотреть, как новые данные будут выглядеть. Для примера, давайте поменяем имя пользователя, который трансфер. Вот такой экран мы имеем на старте (все данные вымышленные):
Для начала, нам нужно понять, в каком запросе хранится информация об имени.

Теперь правой кнопкой мыши нажимаем на нужный нам запрос и в выпадающем меню выбираем Breakpoints.

Видим, что наш брейкпоинт добавлен, функция “отлова” сейчас включена, и при следующей отправке этого запроса он “перехватится”.
Так как нужная нам информация хранится именно в Response-части запроса, менять мы будем именно её. Request-часть не трогаем.
Итак, запускаем приложение ещё раз, и доходим до нужного нам запроса.
Когда приложение отправит запрос, на который мы поставили брейкпоинт, Чарльз уведомит нас об этом:

Сначала Чарльз всегда предлагает изменить Request-часть, но в ней нам не нужно ничего менять, поэтому нажимаем Execute, и дальше Чарльз предложит изменить Response-часть, как раз то что нам нужно. Вот там-то мы нажимаем “Edit response” и доходим до того самого места, где лежит имя нашего пользователя, и меняем его.

Поменяли, и теперь нажимаем Execute.
Важно! Время, на которое запрос перехватывается, ограничено, и нам нужно успеть поменять всё, что мы хотим поменять, примерно за 30 секунд (точное время зависит от того, какой таймаут поставили разработчики для отработки этого запроса), иначе запрос просто отработает без изменений.
Что мы видим на экране приложения теперь?

Ивана с уже новой фамилией
Таким образом можно менять любую информацию в теле и ответе запроса, можно менять значения хэдеров, можно менять коды ответов, например, если мы хотим посмотреть, как будет выглядеть ошибка в приложении, мы можем поменять код ответа с 200 на 500.
2. Rewrite
Функция Rewrite по смыслу похожа на Breakpoint за исключением того, что Rewrite позволяет изменять и перезаписывать запросы и ответы перед их отправкой и получением соответственно, а не ВО ВРЕМЯ, как Breakpoint.
Давайте снова рассмотрим на примере нашего путешественника, заказавшего себе трансфер. Мы снова хотим поменять ему имя, но только теперь не во время запроса, а заранее.
В меню Charles переходим в Tools > Rewrite > Add

Добавляем новый сет, задаём ему название, и теперь нужно прописать, где, что и на что мы хотим поменять.
В верхней части прописываем путь до нужного нам места, значение которого нам нужно изменить, в нижней части указываем что и на что меняем. Остановимся подробнее на втором:

В типе выбираем “Body”, так как нужный нам параметр лежит именно в теле ответа. Далее Response, потому что в теле ответа. И далее мы знаем, что на самом деле пользователя зовут Ivan Sidorov, а мы хотим назвать его по-другому. ОК.
Запускаем наше приложение, доходим до нужного экрана, и что мы видим:

И так теперь будет каждый раз, когда мы будем открывать этот экран, пока мы не отключим функцию Rewrite. И не надо каждый раз руками менять это, как в Breakpoints.
Кстати, в одном сете Rewrite менять можно не только одно значение, а сразу несколько. Достаточно в настройках сета нажать на кнопку Add, и добавить другие условия.
Rewrite также можно использовать для перенаправления трафика, достаточно вместо Body, там где мы выбрали Body, выбрать Host и настроить параметры под него.
Этот метод не лучше и не хуже. Breakpoint хорош, если нам нужно проверить несколько разных значений подряд. Rewrite хорош, если мы заранее знаем, на какое значение нам нужно подменить тот или иной параметр, и знаем, что он нам понадобится несколько раз, чтобы каждый раз не вбивать его руками в условиях ограниченного времени.
3. Map remote
Наконец, последняя в моём сегодняшнем списке, но не последний по важности, функция Map remote.
Map Remote позволяет перенаправить трафик с одного хоста на другой по настраиваемым правилам.
Вот житейский пример:
Приложение ходит за данными по адресу https://backend.service.com.
Команда бекенд-разработчиков делали задачу на фикс какого-нибудь бага, сделали ветку с изменениями этого бэкенда и хотят протестировать его до слива этой ветки в мастер, на всех. Адрес отдельного домена https://new-backend.service.com
Нам нужно протестировать как приложение будет работать с бэкендом с новыми изменениями от разработчиков.
В такой ситуации можно прийти к разработчикам приложения и попросить чтобы они сделали специальную версию приложения, которое будет ходить в новый бэкенд, но для этого нужно отвлекать разработчиков, ждать пока они это сделают.
С помощью Map Remote можно перенаправить трафик приложения без внесения изменений в код.
Итак, идём в Charles > Tools > Map Remote > Enable Map Remote > Add

Теперь, когда мы запустим наше приложение и посмотрим в список запросов, мы увидим, что запросы идут не в обычный хост, а в тот, на который мы сделали перенаправление. И всё, что мы видим в приложении теперь, происходит с учётом тех изменений, которые сделали господа бекендеры в своей ветке-хосте.
Подытожим
В этой статье мы рассмотрели три, на мой взгляд, основные и самые ходовые функции Charles Proxy. Конечно, это только малая часть того, что может этот славный товарищ.
Ещё раз подчеркну, что Charles является незаменимым помощником для разработчиков и тестировщиков как мобильных, так и вэб-приложений.
Это мощный и гибкий инструмент, который может значительно упростить процесс тестирования мобильных приложений и помочь выявлять ошибки и уязвимости в приложении. Использование Charles Proxy может сократить время, затраченное на тестирование, и улучшить качество мобильного приложения в целом.
Подробнее с функционалом можно ознакомиться на официальном сайте (у них, к слову, довольно понятная и подробная документация, если вы владеете английским).
Ну а я желаю вам успешного тестирования, наслаждайтесь этими и узнавайте другие функции этого замечательного инструмента
- снифферы
- тестирование мобильных приложений
- тестирование api
- Разработка мобильных приложений
- Тестирование веб-сервисов
- Тестирование мобильных приложений
Charles
Web Debugging Proxy Application for Windows, Mac OS and Linux
Charles is an HTTP proxy / HTTP monitor / Reverse Proxy that enables a developer to view all of the HTTP and SSL / HTTPS traffic between their machine and the Internet. This includes requests, responses and the HTTP headers (which contain the cookies and caching information).

Recent Developments
For discussion on the latest changes to Charles, please see Karl’s blog.
Charles 5 public beta 11 is now available for testing, featuring more UI improvements, performance improvements, new features and bug fixes. Read more.
Charles 5 public beta 9 is now available for testing, featuring more UI improvements and bug fixes. Read more.
Charles 5 public beta is now available for testing, featuring major UI improvements and technology upgrades. Read more.
Charles 4.6.4 released with macOS crash fixed and Windows code signing updated. Read more.
Charles 4.6.3 released with minor bug fixes and Java 11 update Read more.
In light of the current log4j2 vulnerabilities, we confirm that no version of Charles shipped or used any version of log4j and Charles is therefore thankfully unaffected by this issue. Our best wishes to the log4j developers and everyone affected by this.
Charles 4.6.2 released including bug fixes. Read more.
Charles 4.6.1 released to fix Dark Mode support on macOS Read more.
Charles 4.6 released including new features and stability improvements. Read more.
Charles 4.5.6 released with minor bug fixes and patched security vulnerability. Read more.
Charles 4.5.5 released including bug fixes for SSL certificate imports. Read more.
Charles 4.5.2 released including new features, bug fixes and improvements. Read more.
Charles 4.2.8 released with minor bug fixes. Read more.
Charles 4.2.7 released with minor bug fixes and improvements. Read more.
Charles Security Bulletin for a local privilege escalation in Charles 4.2 and 3.12.1 and earlier. Read more.
Charles 4.2.5 released with major bug fixes and minor improvements. Read more.
Charles for iOS released. Read more.
Charles 4.2.1 released with important bug fixes. Read more.
Charles 4.2 released with major new TLS debugging capability, minor improvements and bug fixes including macOS High Sierra support. Read more.
Charles 4.1.4 released with minor improvements and bug fixes. Read more.
Charles 4.1.3 released including Brotli compression support and other minor bug fixes and improvements. Read more.
Charles 4.1.2 released with bug fixes and minor improvements. Read more.
Charles 4.1.1 released with bug fixes. Read more.
Charles 4.1 released including major new features and bug fixes. Read more.
Charles 4.0.2 released including bug fixes and minor improvements. Read more.
Charles 4.0.1 released including bug fixes. Read more.
Charles 3.11.6 released with support for macOS Sierra and minor bug fixes. Read more.
Charles 4 released featuring HTTP 2, IPv6 and improved look and feel. Read more.
Charles 3.11.5 released including minor bug fixes; especially fixes SSL certificate installation on Android. Read more.
Charles 3.11.4 released with support for ATS on iOS 9 and crash fixes for older versions of Mac OS X. Read more.
Charles v3.11.3 released including bug fixes and minor improvements. Read more.
Charles v3.11.2 released with SSL and Websockets improvements. Read more.
Charles 3.11 released including major new features. Read more.
Charles 3.10.2 released with bug fixes and improvements. Read more.
Charles 3.10.1 released with minor bug fixes. Read more.
Charles 3.10 released with improved SSL (new SSL CA certificate install required), major new features and improvements. Read more.
Charles v3.9.3 released with improvements to SSL support, Mac OS X Yosemite support and other minor bug fixes and improvements. Read more.
Charles v3.9.2 released with minor bug fixes. Read more.
Charles 3.9.1 released with minor bug fixes and improvements. Read more.
Charles 3.9 released with major new features and bug fixes, including the ability to «focus» on hosts so they are separated from the noise. Read more.
Charles 3.8.3 released with support for Mac OS X Mavericks and minor bug fixes. Happy Mavericks Day. Read more.
Charles 3.8.2 released with minor bug fixes. Read more.
Charles 3.8.1 released with minor bug fixes and improvements. Read more.
Charles 3.8 has been released with new features and bug fixes. Read more.
Charles 3.7 has been released. Includes new features, bundled Java runtime (so you don’t need to install Java anymore), and bug fixes. Read more.
Charles 3.7 beta 2 has been released. This changes the SSL signing for Charles on Mac OS X to use Apple’s new Developer ID code-signing. Read more.
Charles v3.6.5 released including bug fixes and minor changes. Read more.
Charles v3.6.4 released including major bug fixes and enhancements. Read more.
Charles v3.6.3 released including minor bug fixes. Read more.
Charles v3.6.1 released including minor enhancements and bug fixes. Read more.
Charles v3.6 released including new features, enhancements and bug fixes. New features include HAR and SAZ file import. Read more.
Charles v3.5.2 released including bug fixes and minor new features. Read more.
Charles 3.5.1 released. Minor bug fixes. Read more.
Charles 3.5 released. Major new features, bug fixes and enhancements.
Charles 3.4.1 released. Minor features and bug fixes.
Charles 3.4 released. Major changes especially to SSL.
New website launched. Follow @charlesproxy on Twitter. Say hi in San Francisco when I’m there for WWDC!
Charles 3.3.1 released. Minor new features and bug fixes. Experimental 64 bit Windows support. Read more.
Charles 3.3 released. Major new features. Download
Charles Autoconfiguration add-on for Mozilla Firefox adds support for Firefox 3.1
Charles 3.2.3 released. Minor new features and bug fixes.
Charles 3.2.2 released. Minor new features and bug fixes.
Charles 3.2.1 released. Minor new features and bug fixes.
Charles 3.2 released. Major new features. Release Notes
Charles 3.2 public beta released. Download and more information on my blog.
Charles 3.1.4 released. Bug fixes and minor new features.
Charles Mozilla Firefox add-on updated for compatibility with Firefox 3.0.
Charles 3.1.3 released. Minor bug fixes, minor new features.
- Chart tab now includes charts for sizes, durations and types
- Request & Response can now be displayed combined on one split-panel
- SSL handshake and certificate errors are now displayed in the tree
Charles 3.1.2 released. Minor bug fixes.
Charles 3.1.1 released. Minor bug fixes.
Charles 3.1 released.
Charles 3.0.4 released. Fixes SSL bug on Java 1.4.
Charles 3.0.3 re-released. Fixes launch bug on computers that haven’t used Charles before.
Charles 3.0.3 released. Various improvements and minor bug fixes.
Charles 3.0.2 released. Minor bug fixes and improvements.
Charles 3.0.1 released. Minor bug fixes.
Charles 3.0 released. Major new features and improvements
Charles 3.0 public beta released.
Charles v2.6.4 release. Minor bug fixes:
- IBM JDK compatibility
- Improved malformed Referer header support
Charles v2.6.3 release. Minor bug fixes:
- Fixed Port Forwarding fault introduced in v2.6.2
Charles v2.6.2 release. Major improvements and bug fixes including:
- No more recording limits. Large responses are now saved to temporary files, reducing memory usage.
- MTU support in the throttle settings
- AMF3 / Flex 2 bug fixes
Charles v2.6.1 release. Minor bug fixes and improvements:
- SOAP information visible while response is still loading
- AMF3 externalizable object parsing regression fixed
- AMF view for AMF3/Flex messages simplified to hide Flex implementation details
Charles v2.6 release. Major improvements and bug fixes including:
- Major UI overhaul
- JSON and JSON-RPC support
- SOAP support
Charles v2.5 release. Major improvements and bug fixes including:
- Major UI improvements
- Support for new filetypes including FLV
- Major improvements to AMF / Flash remoting viewer
- Thank you to everyone who made suggestions and participated in the long testing process.
Charles v2.4.2 release. Minor improvements and bug fixes including:
- Support for request body compression (used by web services)
- Fix for parsing of AMFPHP responses
- Improvements to AMF viewer
Charles v2.4.1 release. Minor improvements and bug fixes including:
- Firefox extension improved
- AMF 0 and AMF 3 parsing improved
- Look and Feel changes to give a greater (and more consistent) range of font sizes in the Charles look and feel
- SSL error reporting improved when a connection cannot be made to a remote host
- Port Forwarding tool and Reverse Proxy tool re-bind exception fixed
Charles v2.4 release. Major new features, improvements and bug fixes including:
- AMF 3 support
- SSL support for IBM JDK (thanks to Lance Bader for helping solve this)
- Automatic Update Checking
- Documentation wiki open to public
Charles v2.3 release. Major improvements and bug fixes including:
- Proxy implementation improvements including better handling of keep-alive connections
- SOCKS proxy added, so any SOCKSified application can now run through Charles
- External proxies configuration improvements including authentication
- Flash Remoting / AMF viewer improvements
- Dynamic proxy port support, for multiuser systems
Charles v2.2.1 release. Minor improvements and bug fixes including:
- Further improved Firefox proxy configuration
- Port Forwarding enhancements including port ranges and UDP forwarding
- Bug fixes for Reverse Proxy and AMF viewer
Charles v2.2 released. Major enhancements and bug fixes including:
- Improved Firefox proxy configuration
- XML viewer improvements
- Line numbers displayed in ASCII viewer
Charles v2.1 released. Major new features and enhancements including:
- Automatic Firefox proxy configuration
- Formatted form posts and query string information
- Parsing of SWF and AMF (Flash Remoting) binary formats
Charles v2.0 released. Major enhancements and improvements.
Feedback & Reviews
Better Mobile Application Testing with Charles Proxy
by Andrew Bardallis A comprehensive walkthrough of using Charles to observe and modify traffic, including using it with mobile devices.
iPhone App Store data mining
by Dan Grigsby Using Charles to explore the iPhone App Store XML.
iPhone HTTP Connection Debugging
by Gary Rogers Using Charles to debug the iPhone.
Charles review on flashgroup.net
by Darren Richardson A great review of Charles from the point of view of Flash developers.
Debugging Flash/Server Interaction with Charles
by uberGeek Using Charles to find those really annoying Flash bugs in record time.
Руководство по использованию Charles
Charles — это широко используемый инструмент перехвата сетевых пакетов под Mac. При разработке мобильных приложений нам часто приходится перехватывать сетевые пакеты для анализа, чтобы отладить протокол сетевой связи с сервером. Чарльз устанавливает себя в качестве прокси-сервера доступа к сети, чтобы через него выполнялись все запросы на доступ к сети, что позволяет осуществлять перехват и анализ сетевых пакетов. Помимо отладки портов в разработке мобильных устройств, Чарльза также можно использовать для анализа протоколов связи сторонних приложений. С помощью функции Чарльза SSL Чарльз также может анализировать протокол Https.
- Основные функции Чарльза включают в себя:
- Перехват сетевых пакетов Http и Https.
- Поддержка повторной отправки сетевых запросов для облегчения внутренней отладки.
- Поддержка для изменения параметров сетевого запроса.
- Поддержка перехвата и динамического изменения сетевых запросов.
- Поддерживает моделируемую медленную сеть.
Charles Установите Чарльза в качестве системного агента
Чарльз завершает перехват пакетов, устанавливая себя в качестве прокси-сервера, поэтому первым шагом использования Чарльза является его установка в качестве прокси-сервера системы. При первом запуске Charles вам будет предложено дать разрешение на настройку прокси-сервера системы. Вы можете ввести логин-пароль, чтобы предоставить Чарльзу это разрешение. Вы также можете проигнорировать запрос, и когда вам нужно установить Charles в качестве системного прокси, выберите «Proxy» -> «Mac OS X Proxy» в меню, чтобы установить Charles в качестве системного прокси.
- Зачем настраивать системный прокси?
- Чарльз не только перехватывает пакеты с мобильного телефона пользователя, но также может использоваться для перехвата пакетов на локальном компьютере, он устанавливается в качестве системного прокси-сервера для перехвата сетевых запросов, отправленных компьютером.

Чарльз назначен системным агентом
③ Установить сертификат Https на компьютер
Если вы не установите сертификат https, запрос и ответ https искажены. После настройки https можно расшифровать как обычно и весело провести время.
Первый шаг: установить сертификат в систему (то же самое для Windows):
Нажмите меню Справка-> SSL-> Проксирование-> Установить корневой сертификат charles в меню Charles.
Установите доверенный сертификат на Mac
Шаг 2: Доверяйте сертификат только сейчас в связке ключей к компьютеру:

Установите доверенный сертификат на Mac
Шаг 3: Настройте хост дешифрования:
1. Нажмите кнопку Настройки на панели инструментов Чарльза и выберите Настройки прокси .
Перейдите на вкладку SSL и выберите Включить SSL-прокси.
2. Заполните имя домена и порт для захвата в разделе «Расположение» на вкладке SSL, нажмите кнопку «Добавить» и введите имя домена для хоста во всплывающей форме. Например, заполните api.baidu.com и введите 443 для порта
Настройки SSL на Mac
Xy прокси мобильного телефона
Настройте Чарльз прокси
1. Запустите программу Charles и установите порт
Proxy —> ProxySettings —> Proxies —> httpProxy
