Локальная подмена
Правило локальной подмены (Map Local) отвечает на подходящий запрос силами приложения, а не сети: запрос не уходит на сервер, а клиент получает тот статус, заголовки и тело, которые вы написали.
Правила живут в отдельном окне, которое открывается из меню Инструменты (Cmd/Ctrl + Shift + M). Правило можно создать и из перехваченного запроса — тогда оно заполняется ответом, который реально пришёл; обычно это самый быстрый способ.
Сопоставление
Правило сопоставляется с полным URL — схема, хост, путь и query — по шаблону wildcard или регулярному выражению и может ограничиваться конкретными методами.
Wildcard:
| Символ | Что совпадает |
|---|---|
* |
любые символы, кроме / — один сегмент пути |
** |
любые символы, включая / — любой путь |
? |
один любой символ |
Wildcard-шаблон должен совпасть с URL целиком, поэтому */api/users/* закреплён с обоих концов. Регулярное выражение используется как написано и совпадает в любом месте URL, пока вы сами не поставите ^ и $. Шаблон можно проверить на примере URL до сохранения правила.
Порты по умолчанию нормализуются с обеих сторон, поэтому https://example.com/v1 совпадёт с перехваченным https://example.com:443/v1.
Метод CONNECT выбрать нельзя: сохранённое тело не является корректным ответом на запрос туннеля. Если нужно вмешаться в установку туннеля, используйте брейкпоинт.
Ответ
В правиле задаются код статуса (100–599), набор заголовков — повторы разрешены, каждый можно выключить по отдельности — и тело, которое пишется как JSON, текст или HTML либо правится целиком как HTTP/1.x-сообщение.
Ещё в правиле может быть задержка до 60 секунд, которая выдерживается перед отправкой ответа.
Поскольку ответ собирается из правила, а не приходит от сервера, часть заголовков по пути исправляется:
Content-Lengthпересчитывается по сохранённому телу;Content-Encoding,Transfer-Encoding,ETagиContent-MD5удаляются — они описывают байты, которых не было;- hop-by-hop заголовки удаляются;
- у
1xx,204и304удаляется и тело.
Когда правило создаётся из перехваченного запроса, в него попадают только те заголовки, которые действительно уйдут клиенту: Content-Encoding и Date не включаются, потому что перехваченное тело хранится уже распакованным.
Поведение
- Если подходит несколько правил, срабатывает созданное последним.
- Подменённый запрос всё равно записывается и помечается как отвеченный правилом. Заданная задержка видна, пока запрос её ждёт.
- Правила применяются раньше брейкпоинтов, поэтому URL, на который есть и правило, и брейкпоинт, будет подменён и не приостановится.
- Задержка задерживает только свой запрос, на параллельные не влияет. Если клиент не дождался, запрос записывается как неудачный.
- Список исключений проверяется первым: правило не может ответить на запрос к хосту, который не перехватывается.
Ограничения
- WebSocket-апгрейды и запросы, импортированные из HAR, использовать для заполнения правила нельзя.
- Для SSE-запроса правило создать можно, но оно ответит на следующий запрос по этому URL обычным ответом, а не потоком, и тело при этом не заполняется.
- Тела больше 8 МБ не открываются на редактирование: они сохраняются как есть, их можно записать в файл. Тело с одной строкой длиннее 128 КБ показывается с переносами и только для чтения — сохранённые байты в обоих случаях не меняются.
Правила вместе с телами хранятся в зашифрованной локальной базе.