cURL-заголовки: как отправлять, настраивать и управлять HTTP-заголовками
Когда вы работаете с HTTP, любое взаимодействие между клиентом и сервером состоит из запросов и ответов, и вместе с ними всегда идут заголовки HTTP. Они несут дополнительную информацию: тип содержимого, данные для авторизации, предпочитаемый формат ответа и многое другое. Используя заголовки в cURL, вы можете управлять этими деталями напрямую, а не полагаться только на поведение браузера по умолчанию.
Опубликовано:
28.11.2025
Время чтения:
8 min
Современные веб-разработчики и QA-инженеры активно используют cURL в командной строке, чтобы смотреть, как ведут себя веб-серверы и веб-приложения, тестировать API, которым нужны дополнительные метаданные, и воспроизводить сложные баги. Умение правильно настраивать параметры cURL и отправлять точные заголовки под разные сценарии — важная часть надежного дебага и автоматизации.
Дальше вы увидите, как корректно настраивать cURL, использовать заголовки в запросах и отправлять практичные примеры команд, которые легко встроить в свой рабочий процесс.
Что такое заголовки в cURL?
HTTP-заголовки — это пары «ключ–значение», которые передаются вместе с HTTP-запросами и ответами. У каждого заголовка есть имя и значение, и вместе они добавляют информацию о самом запросе, ответе и передаваемом содержимом. Типичные заголовки описывают формат данных, параметры аутентификации, правила кеширования или то, как серверу следует интерпретировать тело запроса, а многие клиенты задают разумные значения по умолчанию.
Как отправлять HTTP-заголовки с помощью cURL
Чтобы добавить заголовки в запрос cURL, обычно используют флаг -H или –header. Самый простой пример команды выглядит так:
curl -H "Header-Name: value" https://example.com
Здесь опция -H говорит cURL добавить один пользовательский заголовок и отправить его вместе с вашим HTTP-запросом. Когда вам нужно быстро проверить, как сервер реагирует на определённый заголовок, вы начинаете с конструкции -H “Имя: значение”, а затем уже подстраиваете URL и остальные параметры.
Можно указать cURL использовать разные HTTP-методы с помощью -X GET, -X POST и так далее и при этом отправлять один и тот же заголовок. Для POST-запросов часто комбинируют -H “Content-Type: application/json” с -d ‘{“key”:”value”}’, чтобы передать JSON-данные в теле запроса. Такой шаблон работает для множества команд cURL, когда нужно отправлять точные и предсказуемые заголовки.
Отправка пользовательских и нескольких заголовков

Отправка нескольких заголовков за один раз
Иногда в одном запросе нужно отправить сразу несколько заголовков, и cURL делает это очень легко. Достаточно несколько раз повторить флаг -H, чтобы добавить несколько пользовательских заголовков. Такой подход позволяет одновременно передать данные для аутентификации, трассировки и подсказки нужного формата. Например, вы можете добавить пользовательские API-ключи и идентификаторы корреляции, а заодно указать значения Content-Type и Accept. Связывая несколько -H подряд, вы оставляете все заголовки явными и наглядными.
Отправка пустых заголовков
Можно отправлять и «пустые» заголовки, задавая что-то вроде -H “Header-Name:”. Это удобно, когда вы формируете нестандартный запрос и хотите переопределить значения по умолчанию или очистить те параметры, которые серверу больше не нужны. В некоторых спецификах API пустое значение заголовка используют именно для того, чтобы отключить определённое поведение.
Удаление заголовка
Некоторые серверы и инструменты фактически рассматривают заголовок как удалённый, если вы его переопределяете или отправляете с пустым значением, вместо того чтобы полагаться на поведение браузера. Делая запросы cURL максимально минималистичными и избегая заголовков, которым нужны жёстко заданные значения, вы передаёте только ту информацию, которая действительно нужна серверу и может им быть использована.
Просмотр и получение заголовков
Когда вы тестируете конфигурацию заголовков в cURL, важно не только задать нужные параметры, но и увидеть, что именно ушло на сервер и что пришло в ответ. CURL предоставляет опции -i, -I, -v и –dump-header, чтобы отображать заголовки запросов и ответов вместе с обычным выводом. С их помощью можно сравнивать заголовки запроса и ответа и при необходимости сохранять их в отдельный файл для дальнейшего анализа и отладки.
Просмотр заголовков ответа (-i / -I)
Чтобы посмотреть заголовки, которые вернул сервер, можно использовать флаги -i или -I. Опция -i выводит заголовки ответа вместе с телом, а -I отправляет запрос типа HEAD и показывает только заголовки. Так вы можете проверить тип содержимого, формат данных, настройки Accept и другие параметры. Например, можно задать нужный заголовок, а затем выполнить –dump-header headers.txt, чтобы последующий вывод заголовков сохранился в понятный по имени файл.
Подробный режим (-v)
Флаг -v включает подробный режим, в котором отображаются заголовки как исходящего запроса, так и ответа, а также низкоуровневая информация о соединении. Это помогает увидеть, что именно cURL отправляет на сервер и что возвращается в ответ, лучше понять поведение приложения и упростить отладку проблем, связанных с заголовками.
Распространённые сценарии использования пользовательских заголовков
Есть множество типичных ситуаций, когда нужно отправлять свои заголовки через cURL: от обращения к приватным API до управления кешированием и форматом ответа. Один и тот же заголовок может нести данные для аутентификации или информацию о клиенте, на которую опираются веб-серверы и веб-приложения. Если корректно настроить cURL, такие заголовки будут удовлетворять требованиям API по безопасности и совместимости.
Авторизованные запросы
Многие защищённые API ожидают заголовок Authorization с токеном. В cURL вы можете задать его, указав, например, Authorization: Bearer TOKEN, чтобы сервер смог выполнить аутентификацию и воспринимать ваши пользовательские заголовки как доверенные.
Указание кодировки и формата данных
Если конечная точка ждёт JSON, имеет смысл задать Content-Type: application/json, чтобы сервер корректно разобрал тело запроса. В паре с Accept: application/json это помогает сохранять единый формат JSON и для входящих данных, и для ответа, согласованный с ожидаемыми типами содержимого.
Изменение формата ответа
Некоторые API умеют возвращать XML, JSON или другие форматы, и именно заголовок Accept подсказывает, в каком представлении следует сформировать ответ. Настраивая его, можно переключать формат ответа, не меняя URL или само содержимое запроса.
Условные запросы и Referer
Условные заголовки вроде If-Modified-Since и контекстные заголовки, такие как Referer, добавляют информацию о состоянии кеша, пути перехода и особенностях клиента. Это делает запросы эффективнее, но при этом даёт серверу достаточно контекста, чтобы корректно сформировать ответ.
Продвинутые приёмы работы с заголовками
Продвинутая работа с заголовками в cURL в основном строится вокруг автоматизации и переиспользования. Как только вы настраиваете cURL так, чтобы заголовки подгружались из файлов или сочетались с другими флагами, массовое тестирование становится гораздо проще, особенно для занятых разработчиков.
Файлы с заголовками для массового тестирования
Вместо того чтобы каждый раз переписывать одни и те же заголовки, их можно вынести в текстовый файл и затем повторно использовать этот файл в разных командах. Например, вы можете сохранить туда заголовки для аутентификации и работы с JSON в headers.txt и затем отправлять этот набор в каждом тестовом прогоне. С подходящими инструментами и общим файлом заголовков разработчики могут отправлять сотни похожих запросов при тестировании API и держать конфигурацию в актуальном состоянии.
Комбинация заголовков с другими флагами
Заголовки становятся ещё полезнее, когда вы комбинируете их с другими опциями cURL. В командной строке можно отправить POST-запрос с помощью -X POST, добавить -H “Content-Type: application/json” и указать -d ‘{“key”:”value”}’ как тело запроса, чтобы передать структурированные данные. Дополняя запрос куки, таймаутами и другими настройками, вы формируете более сложные, но предсказуемо работающие запросы, которые легко повторять в ходе тестов.
Поиск и исправление типичных проблем с заголовками cURL
При работе с любыми заголовками, которые вы отправляете через cURL, очень легко столкнуться с тонкими ошибками: опечаткой в имени, лишней кавычкой или заголовком, которого сервер не ожидал. Такие проблемы могут приводить к тихим ошибкам, странным ответам или серверным ограничениям, которые не сразу заметны.
Дважды проверьте синтаксис заголовков
Начните с самых базовых вещей. Проверьте заголовки, которые вы задаёте: имя и значение должны соответствовать шаблону Имя: значение, кавычки — должны быть парными, а спецсимволы — корректно экранированы. Даже пропущенный пробел или лишний символ может привести к тому, что заголовок просто не будет распознан.
Убедитесь, что сервер поддерживает заголовок
Далее стоит проверить, поддерживается ли конкретный заголовок вообще. Не все веб-серверы и веб-приложения принимают любые произвольные заголовки: в некоторых типичных сценариях требуются строго определённые или официально поддерживаемые заголовки, а остальные игнорируются или отбрасываются прокси-серверами и шлюзами.
Проблемы с регистром символов
По стандарту имена HTTP-заголовков регистрозависимыми не являются, но некоторые инструменты, библиотеки или серверные фреймворки всё ещё отображают их так, будто регистр важен. Если всё выглядит правильно, но не работает, попробуйте точно повторить написание из документации или примеров API.
Анализ ответа сервера
На финальном этапе полезно посмотреть, как именно сервер обработал ваш запрос. Включите опции -v, -i, -I или –dump-header, чтобы разобраться, какие заголовки вы действительно отправили и что вернул сервер в ответ — вместе со статусом и телом ответа. Такая проверка помогает быстрее понять, где искать ошибку: в вашей команде, в соединении или в настройках самого сервера.
Примеры заголовков в cURL
Ниже представлены небольшие команды, которые можно использовать как основу для собственных запросов. В них показано, как добавить нужные HTTP-заголовки и протестировать работу API на практике.
Один пользовательский заголовок — самый простой вариант.
curl -H "X-Demo: test" https://example.com
Передача JSON-данных в теле POST-запроса.
curl -H "Content-Type: application/json" -d '{"name":"demo"}' https://api.example.com
Запрос с заголовком для авторизации.
curl -H "Authorization: Bearer TOKEN" https://api.example.com/secure
Несколько пользовательских заголовков в одном запросе.
curl -H "X-Feature: on" -H "X-Trace: abc123" https://example.com
Очистка значения заголовка или его отключение.
curl -H "X-Trace:" https://example.com
Заключение
Хорошее понимание заголовков в cURL помогает уверенно работать с API, видеть больше деталей обмена данными и быстрее находить ошибки. Теперь вы можете управлять тем, какую информацию отправляет клиент и как сервер на неё реагирует — это заметно облегчает и разработку, и тестирование.
В этой статье
- Что такое заголовки в cURL?
- Как отправлять HTTP-заголовки с помощью cURL
- Отправка пользовательских и нескольких заголовков
- Просмотр и получение заголовков
- Распространённые сценарии использования пользовательских заголовков
- Продвинутые приёмы работы с заголовками
- Поиск и исправление типичных проблем с заголовками cURL
- Примеры заголовков в cURL
- Заключение
Готовы начать?
Похожие статьи


