Как отправлять GET-запросы с помощью cURL: подробное руководство с примерами
cURL — это лёгкий инструмент командной строки, «client URL», который позволяет выполнять HTTP-запросы прямо из терминала. Чаще всего разработчики используют его для GET-запросов — простого, но мощного способа получать данные с веб-серверов по HTTP и ряду других протоколов. В этом материале мы разберём типичные сценарии использования curl для GET-запросов, которые встречаются каждый день.
Опубликовано:
22.11.2025
Время чтения:
8 min
Вы узнаете, как запускать команды curl и получать читаемый вывод, как смотреть заголовки ответа и статус-коды, и как один и тот же GET-запрос адаптировать под разные API и нужные ресурсы. По ходу дела станет понятно, когда именно GET-запросы удобнее всего использовать — для тестирования и отладки HTTP, для загрузки файлов и для работы с сервисами, использующими современные сетевые протоколы.
Что такое GET-запрос в cURL?
GET-запрос — один из базовых HTTP-методов, предназначенный для получения данных с сервера. В контексте HTTP он используется именно для чтения ресурса: по умолчанию такой запрос не содержит тела и не должен изменять состояние на стороне сервера. Это также метод, который браузер использует по умолчанию, когда вы вводите адрес в строку и нажимаете Enter — поэтому практически вся простая навигация по вебу состоит из последовательности GET-запросов.
Другие HTTP-методы выполняют другие задачи:
- POST используется для отправки данных и создания новых сущностей.
- PUT и DELETE служат для обновления или удаления конкретного ресурса — обычно такие запросы содержат тело, описывающее изменения.
cURL просто отправляет эти HTTP-методы по сети. Он работает с HTTP «из коробки», но поддерживает и множество других протоколов, а также большое количество опций, позволяющих указать нужный метод. Простейший GET-запрос выглядит как обычная команда curl, в которой указан только URL. Более продвинутые варианты включают дополнительные заголовки, параметры запроса и другие настройки, которые предоставляет cURL.
Как отправить GET-запрос с помощью cURL
cURL — это утилита командной строки, одна из самых распространённых для работы с URL. Она умеет передавать данные по разным протоколам, в том числе HTTP, HTTPS и FTP. В этом разделе мы пройдёмся по основным шагам, как использовать curl для отправки GET-запросов.

Шаг 1: выполнить простой GET-запрос
Самый простой запрос в cURL выглядит так:
curl https://example.com
Во многих терминалах, если команда начинается с URL, cURL автоматически использует метод GET, без каких-либо дополнительных опций. Это базовая форма GET-запроса, которую вы будете выполнять чаще всего. Первый навык — просто привыкнуть запускать такие запросы, чтобы видеть, как сервер отвечает.
Шаг 2: добавить query-параметры к GET-запросу
Часто нужно передать параметры в строке запроса:
curl "https://api.example.com/search?query=test&limit=10"
Здесь параметры включены прямо в URL в соответствии со стандартным синтаксисом. Можно сделать то же самое иначе — с помощью опции -G и набора -d:
curl -G -d "query=test" -d "limit=10" https://api.example.com/search
В этом случае cURL автоматически соберёт правильную query-строку. Во многих HTTP-API параметры GET-запросов должны передаваться именно в URL, а не в теле — большинство эндпоинтов ожидают именно такой формат.
Шаг 3: посмотреть HTTP-заголовки
По умолчанию cURL выводит только тело ответа. Но любой HTTP-ответ содержит и заголовки — они идут до тела и сообщают важные вещи: статус-код, тип содержимого, правила кеширования и многое другое.
Вы можете:
- показать заголовки вместе с телом: curl -i URL
- вывести только заголовки (HEAD-запрос): curl -I URL
- включить подробный вывод с «сырыми» строками заголовков и отладочной информацией: curl -v URL
Это удобно, когда вы отлаживаете запросы или сохраняете ответы в файл и хотите понять, что именно прислал сервер.
Шаг 4: запрашивать данные в формате JSON
Многие API возвращают данные в формате JSON, поэтому иногда важно указать, что вы ожидаете именно такой ответ. В cURL это делается с помощью заголовка Accept:
curl -H "Accept: application/json" https://api.example.com/users
Так вы сообщаете серверу, что предпочитаете JSON, и он отправит данные в этом формате. cURL одинаково хорошо работает с разными типами содержимого — JSON, XML и другими — что делает работу с веб-сервисами предсказуемой и удобной.
Шаг 5: автоматически следовать редиректам
При обычном GET-запросе сервер может вернуть ответ с кодом из диапазона 3xx, то есть отправить вас на другой URL. По умолчанию cURL не следует таким перенаправлениям.
Чтобы разрешить переход по редиректам, используйте опцию -L:
curl -L http://example.com
В этом режиме cURL будет идти по цепочке перенаправлений до конечного адреса и покажет итоговый ответ, корректный статус-код и конечный URL.
Шаг 6: отправлять куки вместе с GET-запросом
Многие веб-приложения используют cookies для авторизации и отслеживания состояния между запросами.
В cURL можно сохранять и отправлять куки автоматически:
curl -c cookies.txt -b cookies.txt https://example.com/profile
- -c cookies.txt — сохраняет куки в файл
- -b cookies.txt — отправляет их при следующем запросе
Получается «cookie jar» — хранилище, из которого cURL подхватывает данные, благодаря чему ваши последующие GET-запросы выполняются уже как авторизованные.
Полезные параметры для GET-запросов в cURL
cURL предлагает множество опций, которые влияют на выполнение GET-запросов. Их можно сочетать с командами выше и покрыть практически любой сценарий.
- -G, -d, –data-urlencode — добавляют параметры к URL вместо тела запроса, сохраняя метод GET.
- -H — добавляет пользовательские заголовки (например, Accept, Authorization, User-Agent), что позволяет передавать токены и другую мета-информацию.
- -o <file> — сохраняет тело ответа в файл, что удобно для загрузки данных и работы с результатами вне терминала.
- -L — разрешает переход по редиректам, чтобы запрос дошёл до конечного URL и вернул итоговый статус.
- -s, -S, -v — управляют уровнем детализации: скрыть прогресс-бар, показывать только ошибки или вывести максимально подробный debug-вывод.
- -I / –head — выполняют HEAD-запрос и позволяют посмотреть только заголовки, без передачи тела.
Опция -X позволяет вручную указать HTTP-метод. Но в большинстве случаев для GET-запросов это не требуется — cURL и так работает корректно, а приведённые выше параметры делают его универсальным инструментом.
Продвинутые техники работы с GET-запросами
Когда вы освоите базовые команды, можно переходить к более сложным сценариям: сохранению данных в файлы, отправке лёгких HEAD-запросов или использованию cURL внутри Python-скриптов и инструментов наподобие requests.
Следование редиректам и сохранение результата в файл
Используя -L совместно с -o или -O, cURL будет проходить редиректы и сохранять результат в файл. Например:
curl -L -O https://short.link/page
Так можно скачивать файлы даже с URL, которые сначала выполняют перенаправление.
Другой пример:
curl -L -o ip.txt ifconfig.me
Команда сохранит ваш внешний IP-адрес в файл ip.txt.
Выполнение HEAD-запроса
Метод HEAD позволяет получить только заголовки ресурса, не скачивая сам контент. Это полезно, если вам нужно узнать тип содержимого, размер или статус, но не загружать данные.
curl -I https://example.com
Вы увидите статус-код, Content-Type, Content-Length и другие заголовки. Этот подход работает и с FTP-серверами, и часто применяется в Python-скриптах перед загрузкой больших файлов — чтобы проверить доступность ресурса.
Частые ошибки и способы их исправления
Понимание стандартных ошибок значительно ускоряет отладку GET-запросов.
Проблемы с URL или DNS
Ошибка вида:
curl: (6) Could not resolve host
означает, что домен указан неправильно или недоступен. Проверьте:
- корректность URL,
- кавычки,
- параметры запроса.
Запуск с флагом -v поможет увидеть, как именно cURL пытается выполнить запрос.
Серверные ошибки 4xx/5xx
Если вы получаете статус 404, 400, 500 и другие не-2xx, это может означать:
- неверные параметры запроса;
- обращение к несуществующему ресурсу;
- внутреннюю ошибку сервера.
Иногда полезно сделать параллельную проверку небольшим Python-скриптом, чтобы сравнить ответы.
Ошибки TLS и сертификатов
Если HTTPS-проверка сертификата не прошла, появится сообщение о проблемах с TLS.
Что можно сделать:
- посмотреть подробности через curl -v;
- временно использовать –insecure (не рекомендуется для реальных сервисов);
- указать корректный набор доверенных CA-сертификатов.
Проблемы авторизации и лимитов
Коды:
- 401 / 403 — неправильные или отсутствующие заголовки авторизации;
- 429 / 503 — превышение лимита запросов или временная недоступность.
При работе с API для скрейпинга стоит делать паузы, повторять запросы или использовать backoff-алгоритмы — как в Python, так и в cURL.
Заключение
Добавление параметров и заголовков, использование файлов cookie, переход по редиректам и сохранение ответа для дальнейшего анализа делают GET-запросы в cURL очень гибкими. Эти приёмы помогают легче и точнее выполнять HTTP-запросы прямо из командной строки. А при работе с API или автоматизацией рядом с Python cURL остаётся мощным и удобным инструментом, который разработчики и специалисты по DevOps используют постоянно.
Часто задаваемые вопросы
Как увидеть и заголовки, и тело ответа одной командой?
Для этого можно выполнить curl -i URL — команда выведет и заголовки, и тело сразу. Если нужна отладка, curl -v покажет «сырые» строки заголовков вместе с телом, что удобно при ошибках или когда требуется проверить статус-код.
Как отправить GET-запрос с токеном авторизации?
Нужно добавить заголовок вида -H “Authorization: Bearer <token>”, чтобы cURL отправил запрос с корректными данными авторизации. В Postman можно открыть окно со сниппетами кода и получить готовую команду curl, которую затем удобно использовать, например, в Python-скриптах.
Можно ли использовать GET-запросы cURL для веб-скрейпинга?
Да, для простых проверок или небольших запросов это подходит. Но нужно учитывать правила robots.txt, ограничения по частоте запросов и юридические требования. Для более крупного и масштабного скрейпинга чаще используют Python-библиотеки вроде requests, так как они более гибкие и безопасные.
Похожие статьи


