ProxyWing

HTTP-заголовки в cURL: как отправить и посмотреть

В cURL опция -H задаёт заголовок запроса, -i показывает заголовки ответа вместе с телом, -I отправляет HEAD. Для отладки запроса и ответа используйте -v, для сохранения заголовков в файл используйте -D.

Опубликовано: 28 ноября 2025 г.
Время чтения: 8 мин
Обновлено: 26 октября 2026 г.
cURL заголовки

Ниже приведены копируемые команды и объяснение результата. В Windows PowerShell запускайте curl.exe; в Linux и macOS используйте curl. Проверить утилиту можно командой curl --version. Учебному сервису httpbin отправляйте только демонстрационные данные.

Что такое HTTP-заголовки

Заголовок передаёт имя и значение, например Accept: application/json. Заголовки запроса описывают обращение клиента, заголовки ответа описывают результат сервера.

Accept сообщает желаемый формат ответа, Content-Type указывает формат передаваемого тела. Authorization передаёт учётные данные, например схему и токен. Эти поля выполняют разные задачи и не заменяют друг друга.

Как отправить один или несколько заголовков

Каждый -H добавляет или переопределяет заголовок. Заключайте имя и значение в обычные прямые кавычки:

curl --connect-timeout 5 --max-time 20 -H "Accept: application/json" -H "X-Demo: test" "https://httpbin.org/headers"

В JSON-ответе найдите headers: в нём должны появиться отправленные Accept и X-Demo. Сервис или промежуточный узел может изменить регистр отображаемого имени.

Для нескольких заголовков повторяйте -H. Не объединяйте разные поля в одну строку через запятую: это меняет значение одного поля. Повторение поля с одинаковым именем также зависит от его правил; для обычного одиночного заголовка задавайте одно значение.

Метод GET используется по умолчанию. Если передаёте тело через --data-binary, cURL по умолчанию отправит POST. Дополнительные команды GET с параметрами описаны в руководстве по GET-запросам cURL.

Как удалить заголовок или отправить пустое значение

В cURL двоеточие и точка с запятой в конце аргумента -H означают разные действия.

Удалить автоматически добавляемый заголовок:

curl -H "User-Agent:" "https://httpbin.org/headers"

Отправить заголовок с пустым значением:

curl -H "X-Demo;" "https://httpbin.org/headers"

Во второй команде -H "X-Demo;" заставляет cURL отправить поле X-Demo: с пустым значением. В первой команде -H "User-Agent:" подавляет стандартный User-Agent. Прокси или сервер может удалить пустое поле, поэтому при необходимости проверьте исходящий запрос через -v.

Не добавляйте перевод строки внутрь заголовка. Один аргумент -H задаёт одну строку заголовка.

Как посмотреть заголовки запроса и ответа

Опция Что делает Метод запроса
-i Печатает заголовки ответа перед телом Сохраняет выбранный метод
-I Запрашивает заголовки без тела Отправляет HEAD
-D headers.txt Записывает заголовки ответа в файл Сохраняет выбранный метод
-v Показывает диагностику и обмен заголовками Сохраняет выбранный метод
Различие -H, -i, -I, -D и -v при обмене HTTP-заголовками в cURL
Опции cURL отдельно управляют заголовками запроса, просмотром ответа и диагностикой.

Заголовки вместе с телом

curl -i "https://httpbin.org/get"

Сначала появится HTTP-статус и заголовки, после пустой строки будет тело. Если требуется только тело JSON, уберите -i перед передачей вывода JSON-парсеру.

Заголовки GET-ответа в файл через -D

curl -D headers.txt -o body.json "https://httpbin.org/get"

Откройте headers.txt для проверки заголовков и body.json для проверки тела. Это сохраняет GET. Опция -I меняет метод на HEAD, поэтому сервер может ответить иначе или не поддерживать запрос.

Исходящий запрос через -v

curl -v --stderr debug.log -H "X-Demo: test" "https://httpbin.org/get"

Диагностика направляется в debug.log через --stderr; тело ответа остаётся в stdout. Этот способ подходит и для PowerShell. В обычном текстовом выводе строки с > относятся к запросу, строки с < относятся к ответу, строки с * описывают соединение. Секреты в диагностике удалите перед публикацией журнала.

JSON, авторизация и условные запросы

Content-Type и Accept

Создайте файл payload.json с демонстрационным содержимым. Сохраните его в UTF-8 без BOM, например в редакторе кода:

{"name": "demo"}

Отправьте его как JSON:

curl -H "Content-Type: application/json" -H "Accept: application/json" --data-binary "@payload.json" "https://httpbin.org/post"

Поле json в ответе должно содержать объект с name. Content-Type относится к отправленному телу. Accept сообщает предпочтение для ответа, но конечный формат выбирает сервер.

Authorization

Учебная проверка Bearer-заголовка:

curl -H "Authorization: Bearer demo-token" "https://httpbin.org/bearer"

httpbin вернёт признак получения токена. На рабочем API используйте его механизм выдачи токенов и защищённое хранение. Передача заголовка сама по себе не добавляет прав доступа. Способы авторизации отдельно разобраны в руководстве по аутентификации cURL.

Условные запросы

После первого ответа сохраните значение ETag, если сервер его прислал. Следующему GET передайте это значение в If-None-Match. Совпадение версии может дать HTTP 304 без тела.

Файл заголовков, редиректы и прокси

Заголовки из файла

Создайте headers.txt, по одному заголовку на строку:

Accept: application/json
X-Demo: test

Передайте файл cURL:

curl -H "@headers.txt" "https://httpbin.org/headers"

Если файл содержит секреты, ограничьте доступ к нему и исключите из репозитория. Файл упрощает повтор команды, но не шифрует значения.

Заголовки при редиректе

-L включает переходы, --max-redirs 5 ограничивает их число. Просматривайте цепочку через -D или -v. Некоторые пользовательские заголовки, например X-API-Key, могут уйти следующему хосту. Прежде чем добавлять -L к запросу с секретными заголовками, проверьте, куда ведёт редирект.

cURL по умолчанию ограничивает передачу Authorization и Cookie на другой origin. Не добавляйте --location-trusted для устранения ошибки доступа без понимания, куда будут переданы учётные данные.

Заголовки для сайта и для прокси

-H задаёт заголовки целевого HTTP-запроса. Для дополнительных заголовков HTTP-прокси предусмотрена --proxy-header; авторизацию прокси обычно задают через --proxy-user. Эти параметры отличаются от Authorization целевого API.

Для отдельного выходного IP выберите индивидуальные прокси ProxyWing. Подставьте адрес, порт и учётные данные из параметров подключения. Контрольный GET через HTTP-прокси приведён в разделе о GET-запросах cURL.

Почему заголовок не сработал

  1. Проверьте, что в команде используется -H с обычным дефисом и прямыми кавычками. Типографские кавычки из редактора командная оболочка может прочитать как часть значения.
  2. Просмотрите отправленное поле через -v. Затем проверьте заголовки ответа через -i или -D.
  3. Сверьте назначение поля с API. Content-Type не просит сервер вернуть JSON; для этого служит Accept.
  4. При 401 проверьте токен, при 403 проверьте права и причину запрета, при 407 проверьте авторизацию прокси.
  5. При 415 сверяйте Content-Type с фактическим телом. При 406 проверьте допустимые форматы ответа.

Имена HTTP-заголовков нечувствительны к регистру. Значения могут зависеть от регистра. Запись заголовка маленькими буквами при HTTP/2 нормальна и сама по себе не означает ошибку.

Не вычисляйте Content-Length вручную для обычных запросов: cURL знает размер подготовленного тела. Некорректное значение может нарушить передачу.

Короткая памятка команд

curl -H "X-Demo: test" "https://httpbin.org/headers"
curl -i "https://httpbin.org/get"
curl -I "https://example.com"
curl -D response-headers.txt -o response-body.txt "https://example.com"
curl -H "User-Agent:" "https://httpbin.org/headers"
curl -H "X-Demo;" "https://httpbin.org/headers"

Последние две команды специально различаются: первая удаляет стандартный заголовок, вторая отправляет пользовательское поле с пустым значением. Для автоматизированного запуска добавьте --connect-timeout 10 и --max-time 30.

Проверка перед сохранением команды

Убедитесь, что исходящий заголовок содержит ожидаемое значение, сервер принял метод и формат тела, а секреты не попали в журнал. Сохраните отдельно тело и заголовки ответа, если их будут читать другие инструменты. Для JSON-парсера нужен чистый JSON без добавленного блока HTTP-заголовков.

Статью написал:

Alexandre Parfonov

Фулстек AI-инженер

Александр привносит в инженерную команду Proxywing глубокую фулстек-экспертизу — от архитектуры бэкенда и оптимизации производительности до AI-ориентированных процессов разработки. Его практический опыт охватывает Node.js, React, облачную инфраструктуру и RAG-пайплайны, что позволяет одинаково уверенно работать как с внутренней логикой прокси-платформы, так и с пользовательской частью продукта. В Proxywing Александр сосредоточен на проектировании отказоустойчивых систем, устранении узких мест производительности и внедрении современных AI-инструментов в процесс разработки. Вне кода он увлечён исследованием передовых подходов в AI-инженерии и созданием сайд-проектов, расширяющих технические горизонты.

Все статьи автора (58)