Что такое Curl? Как работает эта команда?

Юрий Кузнецов

Curl — это кроссплатформенная служебная программа с открытым исходным кодом, популярный инструмент командной строки и библиотека для передачи данных с URL-адресами. Утилита доступна в большинстве систем на основе Unix.

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

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

В этой статье мы рассмотрим весь широкий спектр возможностей этой известной утилиты.

Источник: stackoverflow.com

Содержание:
1. Что такое Curl?
2. Возможности Curl
3. Как работает Curl?
4. Установка Curl
5. Как пользоваться Curl? Примеры
Итоги

1. Что такое Curl?

Curl является сокращением от Client URL (клиентский URL). Это свободное программное обеспечение, которое позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL через командную строку. Оно также включает в себя библиотеку libcurl (библиотека API для взаимообмена данными), которую можно встраивать в другие приложения.

С помощью этого ПО реализуются базовые возможности работы с URL-страницами и передачи файлов. Программа поддерживает работу с такими протоколами, как DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP, поддерживает сертификаты SSL, методы HTTP POST, HTTP PUT, загрузку на FTP, загрузку через формы HTTP, HTTP-Cookie, туннелирование через HTTP-прокси, методы логин+пароль аутентификации (базовый, дайджест, NTLM, Negotiate, Kerberos, CRAM-MD5, SCRAM-SHA).

И хотя Curl не обладает привычным графическим интерфейсом работать с программой можно либо из командной строки, либо устанавливать библиотеку как модуль к какому-то языку программирования, возможности применения этой воистину универсальной утилиты огромны. Убедиться в этом можно на специальном курсе от наших друзей Mate Academy.

2. Возможности Curl

Еще раз повторюсь, что Curl — это программа, работающая в командной строке, позволяющая выполнять HTTP-запросы. При этом взаимодействие можно контролировать различными параметрами и методами. Обычные пользователи чаще всего взаимодействуют с интернетом посредством браузеров (приложений для протокола HTTP/HTTPS), специализированных FTP-клиентов, торрентов и так далее.

С помощью Curl можно получить ту же служебную информацию, что получают все эти клиенты, в виде текста для, например, задач отладки. По факту, единственная функция программы — сделать запрос в интернет по заданному протоколу и получить ответ, тщательно запротоколировав весь процесс взаимодействия с сервером/приложением.

Однако в силу гибкости утилиты, вариантов применения этой функции огромное множество. Например, Curl можно использовать, чтобы автоматически отправлять запросы к определенным сетевым ресурсам, получать доступ к ресурсам в интернете без браузера, имитировать действия пользователей для тестирования API включая подстановку в заголовки запросов произвольного имени клиента, использовать внутри shell-скриптов сценариев командной строки, для возобновления передачи файла с места обрыва и так далее.

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

3. Как работает Curl?

Итак, Curl — программа простая, но универсальная. Различные варианты ее использования контролируются параметрами, которые указываются в командной строке при вызове утилиты. Команда схематически выглядит следующим образом:

curl [список опций] [ссылка]

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

curl highload.today

Стоит отметить, что программа по умолчанию определяет протокол страницы как HTTP.

А вот с помощью опций (параметров) можно заставить Curl делать всякие разные и очень специфические вещи. Перед тем как разбираться со всеми особенностями, предлагаю пройтись по списку наиболее используемых и полезных опций.

Основные опции Curl:

  • -# — во время загрузки будет показан простой прогресс-бар;
  • -0 — будет использован протокол http 1.0;
  • -1 — будет использован протокол шифрования tlsv1;
  • -2 — будет использован sslv2;
  • -3 — будет использован sslv3;
  • -4 — будет использован ipv4;
  • -6 — будет использован ipv6;
  • -A — позволяет указать собственный USER_AGENT;
  • -b — отправляет cookie на сервер из файла;
  • -c — сохраняет cookie в файл;
  • -C — позволяет продолжить загрузку файла с того же места при разрывах соединения;
  • -m — задает максимальное время ожидания ответа от сервера;
  • -d — позволяет отправить данные методом POST;
  • -D — сохраняет заголовки, возвращенные сервером в файл;
  • -e — показывает с какого сайта пришел пользователь (рефер);
  • -E — использует внешний сертификат SSL;
  • -f — отключает вывод сообщений об ошибках;
  • -F — отправляет данные в виде формы;
  • -H — передает заголовки на сервер;
  • -I — получает заголовки HTTP без содержимого страницы;
  • -j — читает и отправляет cookie из файла;
  • -J — удаляет заголовок из запроса;
  • -L — принимает и обрабатывает перенаправления;
  • -s — «тихий» режим;
  • -o — сохраняет содержимое страницы в файл с указываемым именем;
  • -O — сохраняет содержимое страницы в файл с именем страницы или файла на сервере;
  • -p — позволяет использовать прокси;
  • -R — сохраняет время последнего изменения удаленного файла;
  • -S — разрешает выводить сообщения об ошибках;
  • -T — загружает файл на сервер;
  • -Y — разрывает соединение, если скорость загрузки недостаточная;
  • -z — скачивает файл с условием, если тот был изменен позже указанного времени;
  • -V — выводит версию;
  • --limit-rate — ограничивает скорость загрузки.

4. Установка Curl

Работу с Curl поддерживают системы Unix/Linux. В большинстве современных ОС многие дистрибутивы Linux, современные версии macOS, Windows 10 утилита установлена по умолчанию.

Установка на Linux

В Ubuntu или Debian для установки Curl нужно в командной строке ввести команду:

# apt-get install curl

Для проверки статуса установки и текущей версии:

# dpkg -l | grep curl

Если вы работаета в RHEL, CentOS или Fedora, то для установки необходимо войти через SSH от имени пользователя root и выполнить команду:

# rpm -qa | grep curl

Для проверки статуса установки и текущей версии:

# rpm -qa | grep curl

Установка Curl в OpenSUSE:

# zypper install curl

Проверка:

# zypper se curl

Установка Curl в ArchLinux:

# pacman -Sy curl

Проверка:

# pacman -Qi curl

Для справки

В разных дистрибутивах в командную строку можно попасть по-разному. К примеру, в Ubuntu используются такие комбинации:

  • Ctrl+Alt+T — для запуска терминала.
  • Ctrl+Alt+F1 — для работы через консоль.
  • Ctrl+Alt+F7 — для работы через графический интерфейс.

Установка на macOS

В macOS Curl практически со стопроцентной вероятностью уже предустановлена. Для того, чтобы проверить версию утилиты на своем устройстве, нужно войти в «Терминал» (используйте комбинацию Cmd+spacebar для открытия Spotlight, а затем введите Terminal). В командной строке нужно ввести:

curl -V

Если по какой-то причине утилита отсутствует, то можно посетить страницу загрузки на официальном сайте: https://curl.se/download.html. Качаете необходимую версию и устанавливаете вручную. Не знаете, что качать? Загружайте Curl Download Wizard и просто следуйте его инструкциям. На сайте также присутствует различная документация, справочная информация и другие полезные для начинающих разделы разделы.

Установка на Windows

В последних версиях Windows 10 и 11 Curl также должен быть предустановлен. Чтобы это проверить, нужно в командной строке («Пуск» -> cmd) ввести следующее:

curl -V

Если же Curl на вашем устройстве отсутствует, то сначала нужно определить разрядность Windows (правая кнопка мыши по «Компьютер» -> «Свойства» -> в строке «Тип системы» будет 32- или 64-разрядная).

Далее заходим на официальный сайт: https://curl.se/windows. Там качаем официальную сборку Curl под Windows. Если вам необходим исходный код утилиты, то на странице загрузки можно загрузить файл curl-7.62.0.tar.gz. Download Wizard используется, если необходимо скачать сторонние сборки, libcurl, заголовочные файлы, исходники и так далее.

После того, как вы любым из способов получили бинарный файл curl.exe, его нужно поместить в любую папку на компьютере например, C:Program Filescurl\ и больше никогда не трогать.

Далее нажимаем «Пуск» -> «Переменные среды». В открывшимся окне системных свойств нажимаем кнопку «Переменные среды». В верхнем поле необходимо выбрать параметр «Path», а в нижнем, где находятся системные переменные, нажать кнопку «Создать». Там необходимо указать путь к папке с файлом curl.exe. Установка завершена.

5. Как пользоваться Curl? Примеры

Как уже было сказано выше, без указания дополнительных опций команда Curl отображает содержимое веб-страницы в виде исходного кода в средстве просмотра по умолчанию. Чтобы совершать другие действия, необходимо использовать дополнительные аргументы. Рассмотрим самые распространенные варианты использования Curl.

Посетив курс от наших партнеров Mate Academy, можно получить ценные знания и высоко востребованную специальность.

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

Наверняка первым действием, которое вы решите попробовать при помощи Curl, будет загрузка файла или HTML-страницы. Для этого есть две опции: -O и -o. Первая создает файл с таким же именем, как и на сервере, и не требует дополнительных атрибутов. Вторая позволяет указать для файла собственное имя. Например, данная команда скачает файл test.rar с ресурса example и сохранит его под именем Highload.rar:

curl -o Highload.rar https://example.com/test.rar

Если загрузка будет прервана произойдет разрыв соединения или другая ошибка, то загрузку файла можно продолжить с того же места, использовав опцию -C.

curl -C - -o Highload.rar https://example.com/test.rar

Также можно скачивать сразу несколько файлов за раз хотя это делать не рекомендуется, при этом загружать файлы, только если они были изменены после какой-то даты:

curl -O https://example.com/test1.rar -z 23-Dec-21 https://example.com/test2.rar

Благодаря опции -z второй файл будет скачан, только если он был изменен после 23 декабря 2021 года.

Ограничение скорости

Также существует опция для ограничения скорости загрузки до необходимого предела, чтобы не перегружать сеть. Значение указывается в килобайтах в секунду:

curl --limit-rate 160K -O https://example.com/test.rar

Если есть необходимость прекращать загрузку в том случае, когда скорости недостаточно, то используется опция -Y:

curl -Y 100 -O https://example.com/test.rar

Передача файлов

С помощью Curl файлы можно не только скачивать, но и загружать на FTP-серверы.

curl -u логин:пароль -T highload.rar ftp://exampleserver

Здесь с помощью опции -u вводится логин и пароль от сервера exampleserver, а затем заливается на него файл highload.rar благодаря опции -T.

Отправка данных POST

Так как в стандартной форме команда Curl, по сути, реализует запрос GET, для того, чтобы отправить конфиденциальные данные или когда объем введенной информации очень велик, нужно использовать метод POST, при этом применяется опция -d:

curl -d "год=2021&press=%20OK" https://example.com

Примечание: данные в кавычках необходимо кодировать самостоятельно, например, для того, чтобы в строке отобразился пробел, прописывается значение %20.

Также запрос можно отправлять в виде формы, используя -F.

Передача и прием cookie

Чтобы проверить, какие файлы cookie хранятся на стороне пользователя, чтобы сайты, к примеру, быстрее прогружались загружаются по URL, существует команда -c. C ее помощью cookie сохраняются в файл. Если же вам необходимо отправить файл с cookie на сайт, то используется опция -b.

curl -c cookie.txt https://example.com

Передача и анализ заголовков

Если из всего, что есть на странице, вас интересуют только заголовки, то их можно загружать отдельно при помощи опции -I.

curl -I https://example.com

Для передачи заголовка на страницу используется опция -H.

Использование прокси

Если есть необходимость в использовании прокси-сервера для загрузки файлов, то на помощь приходит опция -x, внутри которой указываются данные сервера:

curl -x exampleproxysever.com:3128 https://example.com

Игнорирование ошибки неправильных или самоподписанных сертификатов

При тестировании веб-приложений или API для команды Curl можно прописать опцию -k, чтобы утилита не выдавала ошибку при обнаружении самоподписанных или неправильных SSL-сертификатов.

curl -k https://testexample.com

Другие применения Curl

В линуксоподобных системах для поиска информации и файлов, а также других интересных действий, используются регулярные выражения. Утилита Curl также может с ними взаимодействовать, например, в связке с утилитой grep.

curl -d "ping=8.8.8.8" -s https://example.com/ping/ | grep -ioE 'регулярное выражение'

Как видно выше, гибкость Unix-систем позволяет через конвейер (pipe) «склеить» Curl с Grep, передав результат работы на вход второй утилите. Так как результатом запроса HTTP является документ HTML, иногда нужно будет применять парсер xml/html, который таким же образом можно подключить в обрабатывающую последовательность конвейера.

Также Curl можно легко использовать внутри языков программирования. Например для вызова утилиты в Python существует несколько способов:

from os import system
system("curl -O https://example.com")

или

from shell import shell
curl = shell("curl -O https://example.com")
curl.output()

Интересно, что в Python можно использовать модуль запросов requests.

Итоги

Итак, Curl — это действительно простая, но мощная и универсальная утилита Linux, Windows и macOS для доступа к интернету без браузера, загрузки исходного кода сайтов, отправки POST-запросов, тестирования API, имитации действий сетевых пользователей сервисов и так далее.

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

Чтобы получить краткую помощь, прямо в командной строке можно ввести команду curl --help либо curl --manual. А чтобы закрепить полученные знания, можно посмотреть короткое видео о Curl:

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

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

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023