35% Скидка на Резидентские прокси на 9 месяцев — используйте код WING35 при оформлении заказа

Получить предложение

Как отправлять 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, так как они более гибкие и безопасные.

Похожие статьи

Остались вопросы?