Имитация ответов
Chute может возвращать имитированные данные для совпадающих HTTP/HTTPS-запросов. Для расшифрованных потоков HTTP/2 имитированный ответ отдаётся локально без пересылки запроса; для запросов HTTP/1.1 (обычное проксирование и MitM HTTP/1.1) запрос всё равно отправляется на реальный сервер, а реальный ответ заменяется имитированными данными до того, как он достигнет клиента. Это полезно для тестирования, разработки или блокировки нежелательного контента с пользовательским ответом.
Правила имитации ответов определяются в разделе [Map Local].
К одному запросу применяется только одно правило имитации ответов — первое правило с совпадающим шаблоном URL.
Формат Map Local
Для отправки имитированных ответов из локальных файлов, встроенного текста или содержимого в кодировке base64, с выбранным кодом состояния и заголовками:
[Map Local]
^https://example\.com/api.* data="/path/to/mock-response.json"
^https://example\.com/page.* data="/path/to/page.html" header="SGVhZGVyOiBWYWx1ZQ=="
^https://example\.com/pixel.* base64="R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
^https://example\.com/api/v2.* data-type=text data="rate limited" status-code=429 header="Content-Type: text/plain|Retry-After: 30"
^https://example\.com/beacon.* data-type=tiny-gif
Внимание: Регулярное выражение сопоставляется с любым местом полного URL запроса —
https://…после расшифровки,http://…, когда Chute работает обычным HTTP-прокси, — поэтому^https://example\.comуже охватывает все пути и параметры запроса этого хоста, и.*в конце не нужен. С одним лишь путём оно не сопоставляется никогда, поэтому шаблон вроде^/apiне совпадает. Шаблон сохраняет регистр, так что\S,\D,\Wи\Bзначат то, что написано; само сопоставление регистр не учитывает.
# или // в начале строки или после пробела открывает комментарий до конца строки, если только он не стоит внутри двойных кавычек; ; — никогда. См. Комментарии.
Параметры Map Local
| Параметр | Описание | |||
|---|---|---|---|---|
data="/path/to/file" |
Путь к файлу, который отправляется как тело ответа и читается в момент запроса, — или, вместе с data-type, само тело (см. ниже). |
|||
| `data-type=file\ | text\ | base64\ | tiny-gif` | Как читается data=: file — путь (по умолчанию); text — значение и есть тело; base64 — значение декодируется из base64; tiny-gif — встроенный GIF 1×1, data= не нужен (отправляется как image/gif, если header= не задаёт Content-Type). |
base64="<encoded>" |
Содержимое тела ответа в кодировке base64 (то же, что data-type=base64). |
|||
status-code=<code> |
Код состояния имитированного ответа, 200–599. По умолчанию 200. Код вне этого диапазона делает недействительной всю строку, и об этом сообщается как об ошибке конфигурации. |
|||
| `header="Key: value\ | Key2: value2"` | Пользовательские заголовки ответа. Пары разделяются `\ | , каждая пара делится по первому двоеточию, поэтому значение само может содержать двоеточия (URL). Прежняя форма в base64 (строкиKey:Value\n`, закодированные в base64) по-прежнему принимается. |
Правилу нужно тело:
data=(файл либо текст или base64 вместе сdata-type),base64=илиdata-type=tiny-gif;data-type=textбезdata=даёт пустое тело. Правило, которое не может получить тело — нет параметра тела или файл не читается, — не отвечает: запрос уходит на сервер, а следующие правила имитации ответов не проверяются.Внимание: В обеих формах каждый заголовок делится по первому двоеточию, а у имени и значения обрезаются пробелы по краям; строка без двоеточия игнорируется.
Ответы, которые Chute формирует сам, — имитация ответов (Map Local),
responseскрипта, а также ответы и страница ошибки перезаписи URL и политик REJECT — следуют HTTP: ответ на запрос HEAD — это только заголовок, с тем Content-Length, который получил бы GET, а ответ со статусом 204, 205 или 304 не несёт ни тела, ни Content-Length.
Переменные шаблона
При использовании data= или base64= тело ответа поддерживает подстановку переменных шаблона:
| Переменная | Заменяется на |
|---|---|
{{url}} |
Полный URL запроса в том виде, в каком его увидело правило |
{{host}} |
Имя хоста запроса |
{{path}} |
Относительный путь URL |
{{method}} |
HTTP-метод |
{{ua}} |
Значение заголовка User-Agent |
Пример файла имитированного ответа (response.json):
{
"requested_url": "{{ "{{url}}" }}",
"host": "{{ "{{host}}" }}",
"method": "{{ "{{method}}" }}"
}
Примечание: Для HTTPS-запросов должна быть включена расшифровка MitM для соответствующего имени хоста. Правила имитации ответов для HTTPS-трафика без MitM будут проигнорированы. На обычный HTTP-запрос имитация отвечает, только если он приходит в Chute через его HTTP-прокси; обычный HTTP, пришедший через интерфейс TUN, пересылается без изменений. Chute Android направляет весь трафик через TUN, если в настройках не включён Системный HTTP-прокси, который предоставляет приложениям HTTP-прокси Chute (Android 10 и новее; по умолчанию выключен).
Внимание: Файл за
data=читает устройство, на котором работает Chute, в момент запроса. Когда вы добавляете правило имитации ответов из Chute Dashboard на iPhone, путь на вашем Mac для телефона ничего не значит — вложите содержимое черезbase64=или отдавайте файл по URL и используйте Перезапись URL.
Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.