ProxyWing

Как отправлять GET-запросы с помощью cURL: подробное руководство с примерами

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

Опубликовано: 22 ноября 2025 г.
Время чтения: 8 мин
Обновлено: 26 октября 2026 г.
Как отправлять GET-запросы с помощью cURL

Команды выполняются в терминале. В 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.

Путь GET-параметра от --data-urlencode к URL и ответу сервера
Опция -G переносит параметры в URL, а –data-urlencode кодирует их значения.

Заголовки и 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 или переноса в приложение.

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

Alexandre Parfonov

Фулстек 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; выбор клиента сам по себе не гарантирует безопасность или доступность сайта.