HTTP Request в n8n позволяет обратиться к API и получить данные: например, запись из CRM, остаток товара или статус доставки. Начнём с безопасного упражнения без ключей: запросим вымышленную публикацию, проверим ответ и оставим четыре нужных поля. Потом специально сломаем два запроса, чтобы отличать успешное соединение от пригодных данных.
Результат инструкции
Вы получите workflow из пяти узлов: Manual Trigger → Get Demo Post → Check Post. Ветка true ведёт в Build Result, ветка false - в Reject Response. На выходе будут status, post_id, title и body_length. Данные остаются в результате выполнения n8n: схема не отправляет письма, не меняет записи и не вызывает нейросеть.
HTTP Request сам обращается к внешнему адресу. Webhook, наоборот, принимает входящий запрос. Здесь нужен первый вариант: запуск вручную и чтение учебного API JSONPlaceholder. Его записи вымышленные, а не сведения о настоящих клиентах.
Что понадобится
- Запущенный n8n и доступ к редактору. Пример проверен на локальном n8n 2.42.4; новый платный аккаунт не нужен.
- Доступ к интернету у самого n8n. Открытый сайт в вашем браузере ещё не доказывает, что контейнер или облачный экземпляр может выполнить запрос.
- Новый пустой workflow. Учебный файл не содержит credentials, секретов и автоматической публикации.
- Для предварительной проверки в Windows - PowerShell и curl.exe. Остальные действия выполняются в редакторе n8n.
Установить n8n локально через Docker
Шаг 1. Проверьте учебный API
В PowerShell выполните команду ниже. Это GET, который читает одну публикацию и ничего не создаёт. Ключ не требуется. В ответе должны быть HTTP 200 и JSON с userId = 1, id = 1, title и body.
curl.exe --include --max-time 20 "https://jsonplaceholder.typicode.com/posts/1"
Если соединение не установилось, проверьте написание адреса и доступ к сети. Не отключайте проверку сертификата. Эту команду выполняет ваш компьютер; следующий запрос выполнит уже n8n, поэтому его доступ проверим отдельно.
Шаг 2. Скачайте готовый workflow
Скачать n8n-http-request-json-demo.json
Сохраните файл с расширением .json. Если браузер показывает JSON вместо скачивания, сохраните страницу как файл. Внутри пять узлов и только публичные учебные URL. Перед импортом убедитесь, что это полный JSON, а не скопированный фрагмент статьи.
Шаг 3. Импортируйте схему в новый workflow
Откройте Overview → Create workflow. Откройте скачанный файл в текстовом редакторе, выделите всё и скопируйте. Щёлкните свободную область пустой схемы n8n и нажмите Ctrl+V. Другой вариант - Import from File в меню More actions, если этот пункт доступен в вашей версии.
Имя схемы станет ezgpt-http-request-json-demo. Проверьте наличие пяти узлов и нажмите Zoom to Fit. Не вставляйте их поверх рабочего workflow. Выход true у Check Post должен вести в Build Result, выход false - в Reject Response.
n8n: импорт и экспорт workflow
Шаг 4. Проверьте GET, адрес и авторизацию
Дважды щёлкните по значку Get Demo Post. Это узел HTTP Request. На вкладке Parameters проверьте Method = GET, URL - как ниже, Authentication = None. Send Query Parameters, Send Headers и Send Body для этого упражнения не включайте.
https://jsonplaceholder.typicode.com/posts/1
None допустимо здесь потому, что выбран публичный учебный API. Для вашего CRM или другого закрытого сервиса понадобятся его собственные credentials и права. Не вставляйте ключ в URL или прямо в текст скачиваемой схемы.
Шаг 5. Включите JSON и полный ответ
В Options проверьте настройку Response: Response Format = JSON, Include Response Headers and Status включено, Never Error выключено. Если настройка не видна, добавьте Response через Add option. В импортированном файле эти параметры уже заданы.
Также установлен Timeout = 15000 миллисекунд. Это настройка ожидания начала ответа в HTTP Request, а не обещание завершить весь workflow за 15 секунд. Ignore SSL Issues не включайте. Never Error здесь не нужен: ошибочные HTTP-коды должны останавливать запрос, а не выглядеть как штатные данные.
Шаг 6. Выполните запрос и найдите JSON
Нажмите Execute step в Get Demo Post. После завершения откройте JSON в панели OUTPUT. Должен появиться один item. Благодаря включённому полному ответу у него есть body с публикацией, headers и statusCode. Проверьте statusCode = 200, body.id = 1 и body.userId = 1.
Первое body - оболочка HTTP-ответа. Второе body внутри публикации - сам текст. Поэтому заголовок доступен как $json.body.title, а текст - как $json.body.body. Если отключить Include Response Headers and Status, пути изменятся: публикация будет непосредственно в $json. Не меняйте этот переключатель, не исправив следующие узлы.
{
"body": {
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "текст учебной публикации"
},
"headers": {},
"statusCode": 200
}
Выше сокращённая схема ответа, а не буквальная копия всех заголовков и текста API. Наличие JSON ещё не означает, что пришла нужная запись. Этим займётся следующий узел.
Шаг 7. Проверьте условие в Check Post
Закройте HTTP-узел и откройте Check Post. Это If. Условия должны быть строгими: Boolean → is true; левое значение - Expression. Импорт уже содержит выражение ниже. При ручной вставке в редактор выражений используйте {{ ... }} без служебного начального знака = из JSON-файла workflow.
{{ $json.statusCode === 200 && $json.body?.id === 1 && $json.body?.userId === 1 && typeof $json.body?.title === 'string' && $json.body.title.trim().length > 0 && typeof $json.body?.body === 'string' && $json.body.body.trim().length > 0 }}
Условие требует код 200, числовые id = 1 и userId = 1, непустые строки title и body. Число в виде строки "1" не подходит. Это проверка нашего конкретного учебного ответа, а не универсальная JSON Schema. Для другого API измените правила под его контракт, а не выключайте проверку типов ради зелёного запуска.
Шаг 8. Проверьте четыре поля Build Result
Откройте Build Result - узел Edit Fields (Set). Mode = Manual Mapping. В Fields to Set оставьте четыре поля. status имеет тип String и фиксированное значение checked; остальные значения должны быть в режиме Expression.
- post_id: Number, {{ $json.body.id }}.
- title: String, {{ $json.body.title }}.
- body_length: Number, {{ $json.body.body.length }}.
Include Other Input Fields должен быть выключен. Так на выход не попадут headers и вся исходная публикация. body_length считается свойством length JavaScript: это длина строки, не количество слов и не размер в байтах. Некоторые символы, например emoji, могут занимать две единицы.
n8n: Edit Fields и выбор выходных полей
Шаг 9. Проверьте ветку отказа
Откройте Reject Response - узел Stop And Error. Он подключён только к false у Check Post. В качестве сообщения об ошибке задан текст ниже. Не соединяйте эту ветку с Build Result: отказ должен остановить обработку неподходящих данных.
Unexpected demo response: expected HTTP 200, post 1, user 1, nonempty title and body
Ошибка на этой ветке ожидаема: она означает, что API ответил, но данные не прошли нашу проверку. Она отличается от ошибки самого HTTP-запроса, который может остановиться ещё до If.
Шаг 10. Запустите всю цепочку
Вернитесь на схему и нажмите Execute workflow. После завершения откройте Build Result → OUTPUT → JSON. Должен быть один item и ровно четыре поля. Для учебной публикации при нашей проверке получился следующий объект:
{
"status": "checked",
"post_id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body_length": 158
}
В панели n8n объект показан внутри массива из одного элемента. Это нормально: n8n передаёт items между узлами. Проверьте не только зелёный статус, но и значения полей, отсутствие headers и то, что Reject Response не выполнился. Если API когда-нибудь поменяет учебную запись, сверяйте исходный ответ и правила, а не подгоняйте результат к числу 158.
Шаг 11. Получите 200 с неподходящими данными
В Get Demo Post временно замените URL на адрес ниже. Это существующая задача, а не публикация. Запустите весь workflow заново: API вернёт 200, но нужного строкового поля body не будет. Check Post должен выбрать false, а Reject Response - завершить выполнение ошибкой. Build Result не должен запускаться.
https://jsonplaceholder.typicode.com/todos/1
Этот тест показывает, почему одного statusCode = 200 недостаточно. После проверки верните /posts/1. Не оценивайте старые данные в OUTPUT как результат нового запуска: сверяйте время и журнал последнего выполнения.
Шаг 12. Проверьте 404 и восстановите рабочий адрес
Теперь временно укажите несуществующую публикацию:
https://jsonplaceholder.typicode.com/posts/999999
Нажмите Execute workflow. При выключенном Never Error запрос остановится в Get Demo Post с 404; Check Post и Build Result не должны выполнить обработку. Верните /posts/1, выполните цепочку ещё раз и убедитесь, что снова получили checked и четыре поля.
Дождитесь сохранения workflow. Публикация для такого ручного запуска не требуется: здесь нет webhook или расписания. Перед завершением проверьте, что в сохранённой схеме оставлен правильный URL, а не один из двух ошибочных примеров.
Если результат отличается
| Симптом | Причина | Что проверить |
|---|---|---|
| 401 или 403 | Не хватает авторизации или прав | Credentials и разрешения вашего API |
| 404 | Неверный путь или отсутствующая запись | URL и идентификатор |
| Не удаётся разобрать JSON | Пришёл HTML или другой формат | Тело ответа и Response Format |
| undefined в выражении | Изменилась структура ответа | Полный ответ и путь $json.body |
| Reject Response при 200 | Данные не прошли Check Post | Типы, id, userId, title и body |
| ECONNREFUSED на localhost | Адрес относится к самому n8n | Доступный адрес целевого сервиса |
При запросе к локальному сервису из Docker localhost означает контейнер n8n, а не ваш Windows-компьютер. Для сервиса на Windows-хосте обычно нужен host.docker.internal и действительно доступный порт; облачный n8n не увидит ваш компьютер через собственный localhost. Для JSONPlaceholder это не требуется: он доступен по публичному HTTPS-адресу.
При 429 учитывайте лимит и правила API: не запускайте бесконечные повторы. При ошибке сертификата исправляйте адрес или сертификат сервиса, не выключайте SSL-проверку. Ошибки авторизации и ограничения нагрузки в этом упражнении не моделировались.
n8n: типичные ошибки HTTP Request
Как перейти к своему API
Сначала выберите одну операцию чтения и одну тестовую запись. Проверьте документацию сервиса: HTTP-метод, адрес, способ авторизации и ожидаемый формат. Настройте секрет через Credentials, замените URL, затем адаптируйте Check Post и Build Result под фактический JSON. Выражения из этой статьи работают с одним конкретным ответом, а не со всеми API.
Не добавляйте в первую версию оплату, удаление данных, рассылку или изменение CRM. GET обычно используют для чтения, но значение операции определяется документацией конкретного API. Для изменяющих запросов нужны отдельные тесты, защита от дублей и подтверждение человеком. Не разрешайте AI-модели выбирать произвольные URL и отправлять туда credentials.
HTTP-запрос: термин простыми словами
Принимать входящий JSON через Webhook
Следующий этап: ИИ-агент в n8n
Что проверено редакцией
9 октября 2026 года схема проверена на n8n 2.42.4. В отдельной тестовой базе выполнены три реальных HTTP-сценария: правильная публикация, 200 с неподходящим JSON и 404. Все 12 автоматических проверок результата прошли; отдельно проверены восемь вариантов выражения If. В редакторе локального n8n схема импортирована в новый workflow и выполнена вручную: получены checked, post_id = 1, заголовок и body_length = 158. Существующие схемы не изменялись. n8n Cloud, закрытые API, OAuth, ошибки 429 и сбои сертификатов не тестировались. Обложка - редакционная иллюстрация, не снимок интерфейса.
Частые вопросы
Нужен ли API-ключ для этой инструкции?
Нет. Учебный JSONPlaceholder доступен без ключа. Для закрытого сервиса понадобится его способ авторизации, настроенный через Credentials в n8n. Не сохраняйте секрет в URL или скачиваемом JSON workflow.
Почему в выражении два раза body?
Мы включили Include Response Headers and Status. Первое body содержит ответ API, а вложенное body - текст учебной публикации. Поэтому $json.body.body обращается к тексту. При выключении полного ответа структура и выражения меняются.
Почему workflow выдаёт ошибку, хотя HTTP-код 200?
Код 200 означает успешный ответ сервера, а не соответствие нашим требованиям. Check Post отдельно проверяет поля и типы. Если вместо публикации пришла задача /todos/1, сработает Reject Response, потому что в ней нет нужного текста body.
Нужно ли публиковать workflow для HTTP Request?
Для этой схемы нет: она начинается с Manual Trigger и выполняется кнопкой Execute workflow. Если позже добавите расписание или Webhook, настройку запуска и публикацию нужно проверять отдельно.
Можно ли заменить адрес на API своей CRM?
Да, но недостаточно поменять только URL. Проверьте метод, credentials и права, затем адаптируйте выражение If и выбор полей под JSON вашей CRM. Начинайте с тестовой операции чтения, без изменения клиентских данных.