# Запросы HTTP (/ru/docs/requests)

Запрос — это один сохранённый вызов API: его метод, URL, заголовки, тело, авторизация и настройки, хранящиеся файлом в
вашем рабочем пространстве. Эта страница рассказывает о запросах HTTP от начала до конца. Другие виды запросов (GraphQL,
gRPC, WebSocket и SSE, Socket.IO, MQTT и вызовы MCP) используют ту же страницу с другими вкладками; см.
[виды запросов](#request-kinds) в конце.

## Создание запроса [#create-a-request]

- Выберите **Файл › Новый запрос** (<kbd>⌘</kbd><kbd>N</kbd>). Запрос добавляется в папку, выбранную в боковой панели,
  получает имя **Новый запрос** и открывается во вкладке.
- Или нажмите меню **+** рядом с **Запросы** в боковой панели и выберите **Новый запрос**. Это же меню создаёт другие
  виды запросов и папки и импортирует файлы.
- Или щёлкните папку в боковой панели правой кнопкой и выберите **Новый запрос**, чтобы сразу положить его в эту папку.
- Чтобы начать с команды cURL, создайте запрос и вставьте команду в поле URL. Echolot заполнит по ней метод, URL,
  заголовки, тело, авторизацию и настройки. Параметры, которые он не может принять, показаны как **заметки cURL** под
  строкой URL; нажмите на них, чтобы прочитать, что осталось за бортом.

Переименуйте запрос через **Правка › Переименовать** или щёлкнув его правой кнопкой в боковой панели. **Правка ›
Дублировать** (<kbd>⌘</kbd><kbd>D</kbd>) создаёт копию рядом с ним.

## Страница запроса [#the-request-page]

<Shot id="requests-http-page" alt="Страница запроса List products: строка URL вверху, вкладки запроса слева и ответ JSON справа" />

Сверху вниз:

1. **Строка URL**: метод, URL и **Отправить**.
2. **Строка под ней**: URL в том виде, в каком он будет отправлен, со всеми переменными, подставленными из текущего
   окружения (секреты остаются скрытыми), а справа после отправки — статус, шкала обмена и его время.
3. **Две области**: вкладки запроса с одной стороны, ответ — с другой.

Вкладки запроса: **Документация**, **Заголовки**, **Параметры**, **Тело**, **Авторизация**, **Переменные**, **Тесты**,
**Скрипты** и **Настройки**. Вкладка, в которой что-то есть, показывает точку или число, так что с первого взгляда видно,
что у запроса три заголовка или тело.

Области располагаются рядом или одна над другой. Выберите **Вид › Области**, чтобы переключаться между **Рядом** и
**Друг под другом**; выбор запоминается для каждого вида запросов. Перетащите разделитель, чтобы изменить размеры
областей, и выберите **Вид › Области › Сбросить размеры областей**, чтобы вернуть размеры по умолчанию. Окно, слишком
узкое для двух областей рядом, складывает их друг под друга само.

## Метод и URL [#method-and-url]

Нажмите значок метода, чтобы выбрать **GET**, **POST**, **PUT**, **PATCH**, **DELETE**, **HEAD** или **OPTIONS**.

Введите URL в поле рядом. Используйте `{{variables}}` где угодно в нём, например `{{baseURL}}/products`. Когда вы
вводите `{{`, открывается список переменных из текущей области и [динамических значений](/docs/requests/dynamic-values).
Переменная выглядит как «таблетка»; наведите на неё указатель, чтобы увидеть значение, и дважды щёлкните, чтобы
изменить. Переменные берутся из [окружений, рабочего пространства и папок](/docs/workspaces/environments).

Если что-то в URL не удаётся разрешить, строка под строкой URL сообщает **1 проблема** (или сколько их). Нажмите на неё,
чтобы увидеть, каких переменных не хватает. Неразрешённые токены отправляются как написаны.

Когда запрос читает ответ другого запроса (например, через `{{$response('auth/sign-in', '$.access_token')}}`), а у того
ещё нет ответа, строка сообщает **Сначала отправляет «Sign in»**: Echolot отправляет тот запрос перед этим.

## Параметры запроса [#query-parameters]

Вкладка **Параметры** показывает запрос из URL в виде строк **КЛЮЧ** и **ЗНАЧЕНИЕ**. Они остаются согласованными: измените
строку — изменится URL; введите в URL `?page=2` — появится строка.

- Нажмите **Добавить параметр**, чтобы добавить его.
- Снимите отметку со строки, чтобы перестать её отправлять. Неотмеченные параметры остаются в запросе, но уходят из URL.
- `&`, `#` и пробелы, которые вы вводите в имени или значении, кодируются процентным кодированием автоматически.

## Заголовки [#headers]

Вкладка **Заголовки** перечисляет заданные вами заголовки в порядке, в котором вы их задали, с регистром имён как
написано.

- Нажмите **Добавить заголовок** и введите имя. Echolot дополняет имена заголовков с пометкой, для чего каждый нужен, и
  предлагает обычные значения, когда вы выбрали заголовок.
- Снимите отметку с заголовка, чтобы сохранить его, но не отправлять.
- Перетащите строку за ручку, чтобы изменить порядок, или щёлкните её правой кнопкой для **Переместить вверх**,
  **Переместить вниз** и **Удалить**.
- Нажмите **Правка текстом**, чтобы изменить все заголовки как текст, по одному `Name: value` в строке. Строка,
  начинающаяся с `//`, — выключенный заголовок.

Под вашими заголовками раздел **АВТОМАТИЧЕСКИЕ** перечисляет то, что Echolot добавляет при отправке: заголовки,
которые создают ваша авторизация, тип тела и хранилище cookie, а также те, что нужны любому запросу HTTP. Они показаны
в точности так, как уходят, с замаскированными учётными данными. Наведите указатель на заголовок, чтобы увидеть, откуда он.
Чтобы отправить вместо него своё значение, добавьте заголовок с тем же именем или щёлкните строку правой кнопкой и
выберите **Заменить своим**. Заголовок `Authorization`, который вы написали сами, отправляется вместо того, что добавила
бы вкладка **Авторизация**.

Чтобы Echolot не добавлял собственные заголовки, включите **Отправка как есть** на
[вкладке «Настройки»](/docs/requests/settings#raw-mode).

## Тело, авторизация и настройки [#body-auth-and-settings]

- **Тело**: JSON, формы URL-encoded и multipart, GraphQL, текст, XML, HTML или файл. См.
  [Тело запроса](/docs/requests/body).
- **Авторизация**: Basic, Bearer, API-ключи, OAuth 2.0, AWS Signature и другое либо авторизация папки. См.
  [Авторизация](/docs/requests/auth).
- **Настройки**: версия HTTP, перенаправления, cookie, TLS, тайм-аут и отправка как есть. См.
  [Настройки запроса](/docs/requests/settings).
- **Переменные**: значения, которые использует только этот запрос, и значения, которые он сохраняет из своего ответа.
  См. [Захваты из ответа](/docs/requests/captures).
- **Тесты** и **Скрипты**: проверки ответа и JavaScript до и после отправки. См.
  [Скрипты и тесты](/docs/requests/scripts-and-tests).
- **Документация**: заметки о том, для чего нужен запрос, — для вас и вашей команды.

## Отправка и отмена [#send-and-cancel]

Нажмите **Отправить** или <kbd>⌘</kbd><kbd>R</kbd>. Отправляют и <kbd>↩</kbd> в поле URL, и
<kbd>⌘</kbd><kbd>↩</kbd>. **Запрос › Отправить** делает то же из строки меню.

Пока запрос выполняется, **Отправить** превращается в **Отменить**: нажмите её или <kbd>⌘</kbd><kbd>.</kbd>, чтобы
остановить. Ответ поступает в область ответа потоком, так что начало большого тела можно читать до того, как придёт
конец.

Когда окружение окна защищено, кнопка называется **Отправить в Production…** (с именем окружения), и каждая отправка
сначала спрашивает подтверждение. См. [Защищённые окружения](/docs/workspaces/protected-environments).

Другие действия с текущим запросом находятся в меню **Запрос**:

| Пункт меню | Сочетание | Что делает |
| --- | --- | --- |
| **Скопировать как cURL** | <kbd>⌥</kbd><kbd>⌘</kbd><kbd>C</kbd> | Копирует запрос как команду `curl`. |
| **Сгенерировать код…** | <kbd>⌥</kbd><kbd>⌘</kbd><kbd>G</kbd> | Показывает запрос как код: cURL, Swift (URLSession), JavaScript (fetch, axios), TypeScript (fetch), Python (requests, httpx), Go (net/http), Kotlin (OkHttp), Java (HttpClient), C# (HttpClient), PHP (cURL) или Rust (reqwest). |
| **Экспортировать обмен в HAR…** | | Сохраняет последний обмен как файл HAR. |
| **Найти в теле** | <kbd>⌘</kbd><kbd>F</kbd> | Ищет по телу ответа. |

**Сгенерировать код…** подставляет переменные запроса. Скрипты не выполняются, а секреты попадают в код как есть, так что
будьте внимательны, куда вставляете код. **Открыть папку шаблонов** в этом листе показывает шаблоны, из которых
получается код.

## Вкладки [#tabs]

Каждый открытый запрос получает вкладку над редактором.

| Действие | Как |
| --- | --- |
| Следующая вкладка | **Вкладки › Показать следующую вкладку**, <kbd>⇧</kbd><kbd>⌘</kbd><kbd>]</kbd> |
| Предыдущая вкладка | **Вкладки › Показать предыдущую вкладку**, <kbd>⇧</kbd><kbd>⌘</kbd><kbd>[</kbd> |
| Закрыть вкладку | **Файл › Закрыть вкладку**, <kbd>⌘</kbd><kbd>W</kbd> |
| Открыть последнюю закрытую вкладку | **Вкладки › Открыть закрытую вкладку**, <kbd>⇧</kbd><kbd>⌘</kbd><kbd>T</kbd> |

## Сохранение [#saving]

Команды «Сохранить» нет: каждая правка сама сохраняется в файл запроса через мгновение после того, как вы её сделали,
и любую правку можно отменить через **Правка › Отменить** (<kbd>⌘</kbd><kbd>Z</kbd>). Закрытие вкладки или выход из
приложения ждут, пока последняя правка будет записана.

Если файл изменился на диске, пока у вас есть правки, которые Echolot ещё не записал (например, после `git pull`),
панель сообщает **Этот запрос изменился на диске**. Выберите **Оставить мои**, чтобы сохранить ваши правки и записать
их поверх файла, или **Взять с диска**, чтобы отбросить правки и загрузить файл. См.
[Git и команды](/docs/workspaces/git-and-teams).

## Ответ вкратце [#the-response-at-a-glance]

<Shot id="requests-http-exchange-card" alt="Карточка с подробностями над ответом: статус 200, время, размер, версия TLS и полоса для каждой фазы обмена" />

После отправки строка под строкой URL показывает статус (зелёный для 2xx и так далее), полосу с фазами обмена и общее
время. Наведите указатель на эту строку, чтобы увидеть подробности: размер, сжатие, перенаправления, проверки, TLS,
адрес сервера и сколько длилась каждая фаза.

В области ответа тело показано в нескольких видах, там же заголовки, cookie, исходное сообщение, hex-вид и байты
передачи. Кнопка с часами и числом в конце строки открывает предыдущие ответы этого запроса. См.
[Ответы](/docs/requests/responses).

До первой отправки область ответа говорит **Отправьте пинг**.

## Виды запросов [#request-kinds]

Одна и та же страница запроса отправляет любой протокол, который знает Echolot. Создавайте их из меню **Файл** или меню
**+** боковой панели.

| Вид | Пункт меню | Страница |
| --- | --- | --- |
| HTTP | **Новый запрос** | Эта страница |
| GraphQL | **Новый запрос GraphQL** | [GraphQL](/docs/requests/graphql) |
| gRPC | **Новый запрос gRPC** | [gRPC](/docs/requests/grpc) |
| WebSocket | **Новый запрос WebSocket** | [WebSocket и SSE](/docs/requests/websocket-and-sse) |
| Server-Sent Events | **Новый запрос** (запрос HTTP, сервер которого присылает события потоком) | [WebSocket и SSE](/docs/requests/websocket-and-sse) |
| Socket.IO | **Новый запрос Socket.IO** | [Socket.IO](/docs/requests/socket-io) |
| MQTT | **Новый запрос MQTT** | [MQTT](/docs/requests/mqtt) |
| MCP | **Новый вызов MCP** (меню **+** боковой панели) | [Запросы MCP](/docs/requests/mcp-requests) |

Чтобы отправлять много запросов подряд, с проверками и файлами данных, используйте [Прогон](/docs/requests/runner).
