
Как отправлять GET-запросы с помощью cURL: подробное руководство с примерами
Чтобы отправить GET-запрос через cURL, укажите URL: curl "https://example.com". Метод GET используется по умолчанию. Ниже показано, как передать параметры без ошибок кодирования, проверить ответ и сохранить результат в файл.

Команды выполняются в терминале. В Windows PowerShell используйте curl.exe, чтобы вызвать утилиту cURL. В Linux и macOS используйте curl. Проверьте доступность командой curl --version. Учебный сервис httpbin возвращает отправленные параметры и заголовки; реальные данные аккаунтов в него передавать не нужно.
Что такое GET-запрос в cURL?
GET-запрос — один из базовых HTTP-методов, предназначенный для получения данных с сервера. В контексте HTTP он используется именно для чтения ресурса: по умолчанию такой запрос не содержит тела и не должен изменять состояние на стороне сервера. Это также метод, который браузер использует по умолчанию, когда вы вводите адрес в строку и нажимаете Enter — поэтому практически вся простая навигация по вебу состоит из последовательности GET-запросов.
Другие HTTP-методы выполняют другие задачи:
POST используется для передачи данных и создания ресурсов по правилам API. PUT обычно заменяет представление ресурса, DELETE запрашивает его удаление. Тело DELETE-запроса зависит от API и часто отсутствует.
cURL просто отправляет эти HTTP-методы по сети. Он работает с HTTP «из коробки», но поддерживает и множество других протоколов, а также большое количество опций, позволяющих указать нужный метод. Простейший GET-запрос выглядит как обычная команда curl, в которой указан только URL. Более продвинутые варианты включают дополнительные заголовки, параметры запроса и другие настройки, которые предоставляет cURL.
Как отправить GET-запрос с помощью cURL
Простой GET и первый ответ
curl --silent --show-error --connect-timeout 5 --max-time 20 "https://httpbin.org/get"
В ответе появится JSON с полями args, headers и url. Пустой args означает, что параметры строки запроса не переданы. --silent скрывает индикатор загрузки, --show-error сохраняет сообщения об ошибках.
--connect-timeout 5 ограничивает установку соединения, --max-time 20 задаёт общий предел операции в секундах. Числа в примере можно изменить под свой сервис.
Параметры в URL
Если значения уже закодированы, заключите весь URL в кавычки:
curl "https://httpbin.org/get?q=python&limit=10"
Кавычки нужны, чтобы оболочка передала & внутри URL. Для пробелов, кириллицы и специальных символов используйте -G вместе с --data-urlencode:
curl -G --data-urlencode "q=red fox" --data-urlencode "limit=10" "https://httpbin.org/get"
-G переносит данные в query-строку. --data-urlencode кодирует значение параметра. В JSON проверьте args.q: оно должно равняться red fox. В поле url пробел будет представлен кодированным значением.
-d без -G по умолчанию переключает запрос на POST. Опция -X GET меняет название метода, но сама не переносит данные из тела в URL. Для GET с параметрами используйте -G.

Заголовки и JSON
curl -i -H "Accept: application/json" "https://httpbin.org/get"
-i выводит заголовки ответа перед телом. Accept сообщает желаемый формат; сервер может вернуть другой формат или ошибку согласования. Проверьте Content-Type ответа.
Чтобы сохранить заголовки GET-ответа и тело в отдельные файлы, выполните:
curl -D response-headers.txt -o response.json "https://httpbin.org/get"
Заголовки окажутся в response-headers.txt, тело будет в response.json. -I отправляет отдельный метод HEAD. Его поддержка и результат могут отличаться от GET.
Переход по редиректам
curl -L --max-redirs 5 -w "HTTP=%{http_code} URL=%{url_effective}\n" "https://httpbin.org/redirect/1"
-L включает переходы, --max-redirs ограничивает длину цепочки. Последняя строка показывает конечный HTTP-статус и URL. Эти значения добавляет -w; одна опция -L их отдельно не печатает.
Cookies между запросами
curl -c cookies.txt "https://httpbin.org/cookies/set?theme=dark"
curl -b cookies.txt "https://httpbin.org/cookies"
Первая команда сохраняет полученную cookie, вторая отправляет её подходящему домену. Вторая команда должна вернуть theme со значением dark. Файл cookies может содержать данные сессии. Не добавляйте его в репозиторий. Создание cookie jar само по себе не выполняет вход в аккаунт.
Полезные опции cURL для GET-запросов
| Задача | Опции | Что проверить |
|---|---|---|
| Параметры URL | -G --data-urlencode "q=red fox" |
Значение попало в query-строку |
| Заголовок запроса | -H "Accept: application/json" |
Формат ответа в Content-Type |
| Тело в файл | -o result.json |
Путь и содержимое файла |
| Заголовки в файл | -D headers.txt |
Статус и заголовки GET-ответа |
| Заголовки с телом | -i |
Первый блок перед телом |
| Отдельный HEAD | -I |
Метод изменился на HEAD |
| HTTP-статус | -w "%{http_code}" |
HTTP-код отдельно от кода завершения cURL |
| Ошибка HTTP в скрипте | --fail-with-body |
Ненулевой код завершения при HTTP 400 и выше |
| Общий предел операции | --max-time 20 |
Запрос завершается в заданном бюджете |
--fail-with-body доступен с cURL 7.76.0. В более старой версии используйте --fail, если тело ошибки сохранять не требуется. Подробные примеры отправки и просмотра заголовков есть в гайде по HTTP-заголовкам cURL.
Сохранение результата и запрос через прокси
Сохранить JSON и проверить HTTP-статус
curl --silent --show-error --fail-with-body -L --max-redirs 5 --connect-timeout 5 --max-time 30 -o result.json -w "HTTP=%{http_code}\n" "https://httpbin.org/get"
Ответ сохраняется в result.json. HTTP 200 и код завершения 0 означают, что передача прошла без ошибки cURL и сервер ответил успешно. При HTTP 404 опция --fail-with-body сохранит тело ответа и вернёт код завершения 22. При сетевом сбое ориентируйтесь на сообщение cURL.
В Bash код завершения доступен через echo $?, в PowerShell после curl.exe используйте $LASTEXITCODE.
GET через HTTP-прокси
Возьмите адрес и порт из параметров подключения ProxyWing. Следующий адрес зарезервирован для документации и служит образцом формата:
curl --proxy "http://192.0.2.10:8080" --proxy-user "demo-user" --connect-timeout 5 --max-time 20 "https://httpbin.org/ip"
Замените адрес, порт и имя пользователя своими значениями. При указании только имени --proxy-user cURL запросит пароль отдельно. Для HTTPS-сайта через HTTP-прокси обычно применяется туннель CONNECT; схема адреса прокси остаётся http://, если так указано в параметрах подключения.
Сравните поле origin при прямом запросе и при запросе через прокси. Учитывайте собственный VPN и корпоративный шлюз при сравнении.
Для запросов с отдельным выходным IP выберите индивидуальные прокси ProxyWing. Если переносите проверенный вызов в Python, используйте примеры GET и POST в Requests.
Частые ошибки и способы их исправления
| Симптом | Что означает | Что сделать |
|---|---|---|
cURL 6, Could not resolve host |
Не удалось разрешить имя целевого узла | Проверьте домен, DNS и кавычки вокруг URL |
| cURL 5 | Не удалось разрешить имя прокси | Проверьте адрес прокси отдельно |
| cURL 7 | Соединение не установлено | Проверьте порт, доступность сети и сервера |
| cURL 28 | Истёк лимит ожидания | Сверьте --connect-timeout, --max-time и доступность сервиса |
| cURL 60 | Не прошла проверка сертификата | Проверьте часы, имя узла и доверенный CA |
| HTTP 400 или 404 | Сервер получил запрос, но отклонил его или не нашёл ресурс | Сверьте путь и параметры с API |
| HTTP 401 | Требуется авторизация на целевом сервисе | Проверьте токен и способ входа |
| HTTP 403 | Доступ запрещён | Прочитайте тело ошибки и проверьте права |
| HTTP 407 | Требуется авторизация на прокси | Проверьте прокси-логин, пароль и разрешённый IP |
| HTTP 429 | Сработал лимит запросов | Снизьте частоту и учитывайте Retry-After |
Обычный HTTP 404 не делает код завершения cURL ненулевым. Для автоматизации добавьте --fail-with-body либо проверяйте %{http_code}.
При ошибке TLS используйте актуальное хранилище доверенных сертификатов. Для согласованного корпоративного CA укажите --cacert с путём к полученному файлу. Отключение проверки сертификата не исправляет причину сбоя.
Для отладки добавьте -v. Перед отправкой журнала удалите токены, cookies и учётные данные. Повторять запрос стоит только ограниченное число раз, когда ошибка допускает повтор. Статусы 401, 403 и 404 обычно требуют исправления запроса.
Короткая проверка перед автоматизацией
Проверьте метод, итоговый URL, HTTP-статус и формат тела. Передавайте сложные GET-параметры через -G --data-urlencode и ограничивайте время через --max-time. Для ненулевого кода завершения при HTTP 4xx/5xx добавьте --fail или --fail-with-body. Сохранённая команда станет воспроизводимым примером для проверки API или переноса в приложение.
Статью написал:
Фулстек AI-инженер
Александр привносит в инженерную команду Proxywing глубокую фулстек-экспертизу — от архитектуры бэкенда и оптимизации производительности до AI-ориентированных процессов разработки. Его практический опыт охватывает Node.js, React, облачную инфраструктуру и RAG-пайплайны, что позволяет одинаково уверенно работать как с внутренней логикой прокси-платформы, так и с пользовательской частью продукта. В Proxywing Александр сосредоточен на проектировании отказоустойчивых систем, устранении узких мест производительности и внедрении современных AI-инструментов в процесс разработки. Вне кода он увлечён исследованием передовых подходов в AI-инженерии и созданием сайд-проектов, расширяющих технические горизонты.
Все статьи автора (58)Ответы на часто задаваемые вопросы
Используйте curl -i с URL. Для просмотра отправленных и полученных заголовков добавьте -v: диагностика идёт в stderr, тело ответа идёт в stdout. Опция -I отправляет HEAD и меняет метод запроса.
Добавьте -H "Authorization: Bearer demo-token" к учебной команде GET. На рабочем API передайте действующий токен по его правилам. Используйте HTTPS и исключите токен из журналов и общедоступных файлов.
cURL получает содержимое URL и подходит для проверки или загрузки страниц. Соблюдайте правила цели и лимиты запросов. Для обработки набора данных можно перенести проверенные вызовы в Python; выбор клиента сам по себе не гарантирует безопасность или доступность сайта.


