Код
#статьи

Как работать с Curl: синтаксис и основные команды

Осваиваем швейцарский нож для взаимодействия с сетевыми протоколами.

Иллюстрация: Оля Ежак для Skillbox Media

Curl (Client URL, или «Клиентский URL») — это инструмент командной строки, предназначенный для передачи данных по различным сетевым протоколам. Он помогает разработчикам, системным администраторам и другим специалистам выполнять HTTP-запросы, загружать файлы, тестировать API и решать множество задач по отладке веб-приложений.

Давайте сразу проверим Curl в действии. Для этого откройте на своём компьютере терминал, скопируйте следующую команду и нажмите Enter:

curl https://httpbin.org/ip

После ввода команды Curl отправит GET-запрос на сервис httpbin.org, который обработает запрос и вернёт ваш текущий IP-адрес в формате JSON:

C:\Users\user>curl https://httpbin.org/ip
{
  "origin": "95.165.134.78"
}

Похожим образом Curl позволяет легко взаимодействовать с различными API и получать нужную информацию. Теперь поговорим об этом подробней.

Содержание

Что такое Curl и зачем он нужен

В 1997 году шведский программист Даниэль Стенберг разработал утилиту httpget — инструмент для загрузки валютных курсов через IRC-бота. Если вы хотели узнать текущий курс доллара, процесс выглядел примерно так:

  • Бот подключался к сайту с актуальными курсами валют.
  • Программа httpget загружала страницу и извлекала нужные данные о курсе доллара. Например, 1 USD = 30 RUB 😢
  • Затем она передавала эту информацию IRC-боту, который отвечал на ваш запрос в IRC-чате.

Проект привлёк внимание многих разработчиков, поскольку решал актуальную проблему того времени — загрузку данных из интернета. До появления httpget разработчикам приходилось создавать отдельные скрипты для каждого случая получения данных. Программа позволяла получить нужную информацию всего несколькими простыми командами.

Со временем проект HTTPget сменил название на Urlget, а затем на Curl. Сегодня Curl — это кросс-платформенная утилита командной строки, которая позволяет передавать или загружать данные с сервера, устанавливая подключение через различные протоколы: HTTPHTTPSFTPSFTPTFTPSCPTelnetDICTLDAPPOP3, IMAPSMTP и другие.

Сейчас, помимо Curl, существуют и другие инструменты для работы с HTTP-запросами. Вот некоторые из популярных:

  • Wget — утилита командной строки для загрузки файлов, удобная для рекурсивной загрузки и работы с FTP-протоколом.
  • Postman — графический инструмент для тестирования API. Он лучше Curl подходит для сложных запросов и визуализации ответов, однако уступает в гибкости при автоматизации задач.
  • HTTPie — это современный аналог Curl с упрощённым синтаксисом, цветным выводом результатов и менее широким набором функций.
  • Axios — это JavaScript-библиотека для выполнения HTTP-запросов. Она удобна для веб-разработки, но ограничена средой JavaScript: Axios можно использовать только в браузерах для HTTP-запросов на стороне клиента и в Node.js для запросов на стороне сервера.

Несмотря на множество альтернатив, Curl остаётся популярным инструментом благодаря своей универсальности, широкой поддержке протоколов и кросс-платформенности. Давайте перейдём к его установке.

👉 Возможности Curl и других бесплатных инструментов для передачи данных: сравнительная таблица

Как установить и запустить Curl

В современных операционных системах утилита Curl обычно установлена по умолчанию. Для проверки откройте терминал и введите команду:

curl --version

Должен отобразиться номер версии и поддерживаемые протоколы:

Результат вывода после проверки версии Curl в командной строке.
Скриншот: Windows 10 / Skillbox Media

Если Curl не установлен, в терминале появится сообщение об ошибке:

'curl' is not recognized as an internal or external command,
operable program or batch file.

Если вы видите подобное сообщение, значит, программа Curl недоступна и её нужно загрузить. Способ установки зависит от операционной системы.

Если у вас macOS, установите менеджер пакетов Homebrew и выполните в терминале следующую команду:

brew install curl

После завершения установки проверьте версию Curl:

curl --version

Если у вас Linux, то способ установки будет зависеть от дистрибутива. Для Ubuntu или Debian выполните последовательно следующие команды:

sudo apt-get update 
sudo apt-get install curl

Для Fedora:

sudo dnf install curl

Для CentOS или RHEL:

sudo yum install curl

Для Arch Linux:

sudo pacman -S curl

После установки проверьте версию Curl командой:

curl --version

Если у вас Windows 10 или 11, откройте PowerShell или командную строку от имени администратора и установите Curl через менеджер пакетов:

winget install curl

После установки перезапустите PowerShell или командную строку и проверьте установку:

curl --version

Если у вас Windows 7, 8 или 8.1, скачайте архив с утилитой с сайта curl.se через браузер Pale Moon. Современные браузеры могут не поддерживаться устаревшими версиями Windows или блокировать загрузку по соображениям безопасности. Pale Moon — это легковесный браузер, позволяющий загружать сторонние файлы без подобных ограничений.

После загрузки распакуйте папку из архива, переименуйте её в Curl и поместите в удобное место. Например, наша папка находится по пути: C:/Program Files/Curl. Затем откройте папку Curl, перейдите в подпапку bin и скопируйте полный путь к этому каталогу:

Скриншот: Windows 7 / Skillbox Media

Не выходя из проводника, щёлкните правой кнопкой мыши по разделу Компьютер и в появившемся меню выберите пункт Свойства:

Скриншот: Windows 7 / Skillbox Media

Откроется информационное окно со сведениями о вашем компьютере. В левой панели щёлкните на пункт Дополнительные параметры системы:

Скриншот: Windows 7 / Skillbox Media

В открывшемся окне нажмите кнопку Переменные среды:

Скриншот: Windows 7 / Skillbox Media

В разделе Системные переменные найдите пункт Path, выделите его и нажмите кнопку Изменить:

Скриншот: Windows 7 / Skillbox Media

Появится окно Изменение системной переменной, в котором вам нужна строка Значение переменной. Поставьте точку с запятой в конце текущего значения и сразу после него без пробела вставьте скопированный путь к каталогу. Нажмите ОК во всех открытых окнах и перезагрузите компьютер:

Скриншот: Windows 7 / Skillbox Media

После перезагрузки откройте командную строку и выполните проверку:

curl --version

Если отобразилась версия утилиты, значит, всё правильно. Если появилось сообщение об ошибке или команда не распознана, попробуйте следующее:

  • Проверьте путь к Curl в разделе Переменные среды Path — убедитесь, что вы добавили его согласно инструкции.
  • Перезапустите командную строку или PowerShell.
  • Если проблема сохраняется, перезагрузите компьютер ещё раз.
  • Если ничего не помогло, повторите процедуру установки.

Базовый синтаксис

Общий синтаксис Curl-команд выглядит следующим образом:

curl [параметры] [URL]

Базовые команды можно выполнять без параметров по указанию URL-адреса. Например, с помощью следующей команды вы сможете загрузить HTML-структуру выбранного сайта в свой терминал:

# Замените example.com на адрес любого сайта
curl https://www.example.com

Хотя параметры необязательны, они позволяют точно настроить поведение Curl и расширить его функциональность. Вот несколько частых параметров:

  • -O: сохраняет скачиваемый файл с его оригинальным именем;
  • -o: сохраняет файл с указанным вами именем;
  • -I: получает только HTTP-заголовки ответа сервера;
  • -L: следует редиректам. Например, если сайт перенаправляет запрос с http://example.com на https://example.com, curl с параметром -L автоматически выполнит это перенаправление.

Параметры всегда должны располагаться перед URL и их можно комбинировать. Вот пример комбинированной команды:

curl -LO <https://example.com/file.zip>
# Эта команда следует редиректам (-L) и сохраняет файл с оригинальным именем (-O)

Для просмотра всех доступных параметров используйте команду:

curl --help all

В следующем разделе мы рассмотрим основные сценарии использования Curl и попрактикуемся применять команды с различными параметрами.

Как пользоваться Curl

Рассмотрим команды для основных сценариев использования Curl:

  • GET-запрос: curl https://example.com
  • POST-запрос: curl -X POST -d "data" https://example.com
  • Скачивание файла: curl -O https://example.com/file.zip
  • Вывод заголовков: curl -I https://example.com
  • Аутентификация: curl -u username:password https://example.com
  • Следование редиректам: curl -L https://example.com
  • Загрузка файла: curl -T file.txt https://example.com/upload

Для закрепления этих команд воспользуемся сервисом JSONPlaceholder. Это бесплатный онлайн REST API, предоставляющий фиктивные данные для обучения и тестирования. Данный ресурс позволяет практиковаться в работе с API без настройки собственного сервера.

GET-запрос

Эта команда позволяет получать данные с сервера без их изменения. С её помощью вы можете просматривать содержимое ресурса, проверять доступность API или проводить отладку приложения.

Отправим GET-запрос для получения информации о посте:

curl https://jsonplaceholder.typicode.com/posts/1

В результате мы получим примерно такой JSON-объект:

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

В ответе содержится информация о посте: идентификатор пользователя (userId), идентификатор поста (id), заголовок (title) и содержание (body). Поскольку сервис JSONPlaceholder предоставляет фиктивные данные, содержимое вашего поста может отличаться от приведённого примера.

POST-запрос

Эта команда применяется для передачи данных на сервер при заполнении веб-форм, отправке сообщений или создании новых записей в базе данных.

Создадим новый пост и отправим на сервер следующие JSON-данные:

{
  "title": "Заголовок поста",
  "body": "Здесь мы добавляем содержание поста",
  "userId": 1
}

Выполним Curl-команду:

curl -X POST -H "Content-Type: application/json" -d "{\"title\": \"Заголовок поста\", \"body\": \"Здесь мы добавляем содержание поста\", \"userId\": 1}" "https://jsonplaceholder.typicode.com/posts"

После обработки запроса сервер вернёт ответ, в котором содержится информация о созданном посте с его уникальным идентификатором:

{
  "title": "Заголовок поста",
  "body": "Здесь мы добавляем содержание поста",
  "userId": 1,
  "id": 101
}

Читайте также:

Методы GET и POST в HTTP

Скачивание файла

Эта команда позволяет сохранить полученные данные в файл на вашем компьютере. Это удобно при работе с большими объёмами данных или когда требуется дальнейшая обработка полученной информации.

Сохраним JSON-ответ в файл post.json в нашей текущей директории:

curl -o post.json https://jsonplaceholder.typicode.com/posts/1

Результат вывода:

C:\Users\user>curl -o post.json https://jsonplaceholder.typicode.com/posts/1 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 292 100 292 0 0 380 0 --:--:-- --:--:-- --:--:-- 382

Файл post.json сохранён в директории C:\Users\user. Вывод также содержит статистику загрузки данных:

  • Общий размер файла: 292 байта.
  • Процент загрузки: 100%.
  • Скорость загрузки: 380 байт/с.
  • Время выполнения: мгновенно (--:--:--).

Вывод заголовков

Эта команда позволяет получить заголовки HTTP-ответов без тела сообщения. Это полезно для проверки статуса ответа, типа содержимого, заголовков кэширования и других метаданных с запрашиваемого ресурса.

Отправим запрос для получения HTTP-заголовков из нашего сервиса:

curl -I https://jsonplaceholder.typicode.com/posts/1

Пример ответа:

HTTP/1.1 200 OK
Date: Wed, 23 Oct 2024 07:34:44 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 292
Connection: keep-alive
Report-To: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1729551695&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=T06zv%2Bip6vp%2FcW6OahKqDwFYY1PQhd6eXYmDv1DMf3g%3D"}]}
Reporting-Endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1729551695&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=T06zv%2Bip6vp%2FcW6OahKqDwFYY1PQhd6eXYmDv1DMf3g%3D
Nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
X-Powered-By: Express
X-Ratelimit-Limit: 1000
X-Ratelimit-Remaining: 999
X-Ratelimit-Reset: 1729551747
Vary: Origin, Accept-Encoding
Access-Control-Allow-Credentials: true
Cache-Control: max-age=43200
Pragma: no-cache
Expires: -1
X-Content-Type-Options: nosniff
Etag: W/"124-yiKdLzqO5gfBrJFrcdJ8Yq0LGnU"
Via: 1.1 vegur
CF-Cache-Status: HIT
Age: 1983
Accept-Ranges: bytes
Server: cloudflare
CF-RAY: 8d700bdd4a385b4f-VIE
alt-svc: h3=":443"; ma=86400
server-timing: cfL4;desc="?proto=TCP&rtt=25362&sent=5&recv=6&lost=0&retrans=0&sent_bytes=3130&recv_bytes=510&delivery_rate=144240&cwnd=252&unsent_bytes=0&cid=748ae82f39ab1e32&ts=71&x=0"

Этот вывод содержит важную информацию для анализа ответов API и отладки запросов. В нём есть статус ответа (200 OK), тип содержимого (например, application/json), длина контента, а также заголовки кэширования, безопасности и ограничения скорости. Такие сведения помогают разработчикам лучше понять взаимодействие с сервером и выявить потенциальные проблемы.

Аутентификация

Аутентификация обеспечивает доступ к частным или защищённым ресурсам. Сервис JSONPlaceholder не требует аутентификации, однако вы можете выполнить команду, демонстрирующую передачу данных при работе с защищёнными API. В нашем примере сервер вернёт список постов, а в реальном сценарии такой запрос открыл бы доступ к закрытому ресурсу:

curl -u username:password https://jsonplaceholder.typicode.com/posts

Следование редиректам

Редиректы полезны при работе с URL-адресами, которые могут перенаправлять на другие ресурсы. JSONPlaceholder не использует редиректы, поэтому команда ниже эмулирует этот процесс, позволяя Curl автоматически следовать по цепочке переадресаций сайтов. При реальном запросе вы получите конечный ресурс после различных перенаправлений:

curl -L https://jsonplaceholder.typicode.com/posts/1

Загрузка файла

Вы можете отправлять POST-запросы для передачи больших объёмов данных или заранее подготовленной информации. Создадим файл newpost.json и сразу отправим его содержимое на JSONPlaceholder.

Добавим кодировку UTF-8, чтобы избежать ошибок при отображении данных на русском языке:

chcp 65001

Создадим файл newpost.json:

echo {"title": "Загруженный пост", "body": "Содержимое поста", "userId": 1} > newpost.json
curl -X POST -H "Content-Type: application/json" -d @newpost.json https://jsonplaceholder.typicode.com/posts

Получаем ответ от сервера, подтверждающий выполнение запроса:

C:\Users\user>curl -X POST -H "Content-Type: application/json" -d @newpost.json https://jsonplaceholder.typicode.com/posts
{
  "title": "Загруженный пост",
  "body": "Содержимое поста",
  "userId": 1,
  "id": 101
}

Что дальше

Вы познакомились с возможностями Curl, и, если считаете, что этот инструмент может пригодиться в работе, рекомендуем следующие ресурсы:

  • Everything curl — бесплатная онлайн-версия книги от создателя Curl, в которой он подробно рассказывает об устройстве технологии.
  • Официальная документация с описанием всех опций и команд Curl.
  • Блог Даниэля Стенберга, где он часто пишет о Curl и смежных технологиях.
  • GitHub-репозиторий Curl — позволяет отслеживать разработку проекта, сообщать о проблемах и вносить свой вклад в развитие Curl.
  • Curl Сookbook — сборник практических примеров использования Curl для решения различных задач.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Старт в DevOps: системное администрирова­ние для начинающих Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована