# Захваты из ответа (/ru/docs/requests/captures)

Захват сохраняет значение из ответа запроса в переменной после каждой отправки. Захватите токен доступа из ответа на
вход в `{{token}}`, и каждый запрос, использующий `{{token}}`, будет отправлять последний, без копирования. Когда токен
обновляется, все получают новый.

Захваты сохраняются вместе с запросом, поэтому они работают для всех, у кого есть рабочее пространство, — в Прогоне и в
сценариях, а не только когда вы нажимаете **Отправить**.

## Сохранение значения из ответа [#store-a-value-from-the-response]

Быстрее всего создать захват из самого ответа:

1. Отправьте запрос. В примере Alpenglow отправьте **Auth › Sign in**.
2. На вкладке **Тело** выберите **JSON-дерево** (или **Форма**, **MessagePack** или **XML** для таких тел).
3. Наведите указатель на значение, например `access_token`, и нажмите **Сохранить в переменную…**.
4. Введите **Имя переменной** или оставьте предложенное по пути. Уже занятые имена предлагаются по мере ввода; если
   выбрать одно из них, оно заменит эту переменную (панель сообщает **Заменяет token**).
5. В поле **Сохранить в** выберите окружение окна (**Окружение «Staging»**) или **Рабочее пространство**.
6. Отметьте **Секрет**, чтобы значение хранилось только в Связке ключей и никогда в файлах. Для имён, похожих на
   учётные данные (`token`, `secret`, `password`, `apiKey` и подобных), флажок уже отмечен.
7. Оставьте отмеченным **Обновлять при каждой отправке**, чтобы это стало захватом запроса, сохранённым вместе с ним.
   Снимите отметку, чтобы сохранить значение один раз.
8. Нажмите **Сохранить**.

<Shot id="requests-http-store-variable" alt="Панель «Сохранить в переменную» над JSON-деревом ответа Sign in: путь $.access_token, имя переменной token, «Сохранить в» — «Рабочее пространство», отмечены «Секрет» и «Обновлять при каждой отправке»" />

## Правка захватов [#edit-captures]

Захваты запроса находятся на его вкладке **Переменные** в разделе **Из ответа**, под собственными переменными запроса.
Каждая строка — один захват:

| Столбец | Что содержит |
| --- | --- |
| Флажок | Выполняется ли захват. |
| **Переменная** | Имя переменной без скобок. |
| **Откуда** | Откуда в ответе читается значение. |
| **Путь или имя** | JSONPath, XPath либо имя заголовка или cookie. |
| **Сохранить в** | **Окружение** (выбранное для окна при отправке запроса) или **Рабочее пространство**. |
| **Секрет** | Хранится в Связке ключей на этом Mac и никогда не попадает в файлы рабочего пространства. Переменная, уже являющаяся секретом, остаётся ею. |

Нажмите **Добавить значение**, чтобы добавить строку, и кнопку **−**, чтобы удалить. После отправки каждая строка
показывает зелёную галочку, если значение сохранено, или оранжевое предупреждение с причиной, если нет.

### Откуда берутся значения [#where-values-come-from]

| Откуда | Путь или имя | Пример |
| --- | --- | --- |
| **JSON** | JSONPath в теле JSON. | `$.access_token` |
| **Форма** | JSONPath в теле URL-encoded, прочитанном как объект. | `$.access_token` |
| **MessagePack** | JSONPath в теле MessagePack, прочитанном как JSON. | `$.access_token` |
| **XML** | XPath в теле XML. | `/auth/token` |
| **Заголовок** | Заголовок ответа по имени. | `Location` |
| **Cookie** | Cookie, который устанавливает ответ, по имени. | `session` |
| **Статус** | Код состояния. | |
| **Тело** | Всё тело как текст. | |

## Окружение или рабочее пространство [#environment-or-workspace]

- **Окружение** записывает переменную в окружение, выбранное для окна в момент отправки. Используйте его для значений,
  которые различаются по серверам, например токен для staging и токен для production. Если окружение не выбрано,
  ничего не сохраняется, а строка предлагает выбрать окружение или сохранить в рабочее пространство.
- **Рабочее пространство** записывает переменную рабочего пространства, одинаковую при любом выбранном окружении.

Значение окружения главнее значения рабочего пространства с тем же именем, поэтому захват в рабочее пространство
скрыт, если в выбранном окружении есть переменная с таким именем. См. [Окружения](/docs/workspaces/environments).

## Секреты [#secrets]

Захваченный секрет записывается только в Связку ключей. Файл рабочего пространства называет переменную, но никогда не
содержит её значения, поэтому рабочее пространство можно коммитить. Включайте **Секрет** для каждого токена, ID сеанса
или ключа, который вы захватываете. См. [Секреты](/docs/workspaces/secrets).

В Alpenglow **Auth › Sign in** захватывает `$.access_token` в секрет рабочего пространства `token`, а папка **Orders**
отправляет его как Bearer-токен.

## Если ничего не захвачено [#when-nothing-is-captured]

Захват оставляет переменную как была и после отправки сообщает почему, когда:

- статус ответа 400 или больше: значения сохраняются только из ответов ниже 400, поэтому неудачный вход никогда не
  затирает хороший токен;
- путь ничего не находит в ответе;
- тело больше 32 МБ;
- захват сохраняется в окружение, а окружение не выбрано;
- запись не разрешена: когда запрос отправляет ИИ-агент, его политика решает, можно ли ему менять переменные.
  См. [Агенты](/docs/ai/agents).

## Захваты или значения из ответа [#captures-or-response-values]

[Динамические значения](/docs/requests/dynamic-values#values-from-other-requests-responses) вроде
`{{$response('auth/sign-in', '$.access_token')}}` читают последний ответ одного запроса напрямую и, если ответа нет,
сначала отправляют его. Захват же копирует значение в переменную, что подходит для значения, которое используют многие
запросы или которое могут обновлять несколько запросов. Оба способа читают одни и те же JSONPath и XPath.
