Curl является одним из недооцененных и в то же время крайне важных инструментов командной строки для передачи данных с использованием различных сетевых протоколов.

Как пользователь Linux, вы часто сталкиваетесь с curl, который используется для загрузки программного обеспечения из веб-хранилищ. Curl намного мощнее всего этого. Curl позволяет выполнять более сложные операции, чем простая загрузка файлов: любые HTTP-запросы, SSL-соединения, загрузка по FTP, аутентификация, управление прокси, установка тайм-аутов и многое другое.

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

Цель этого краткого руководства – показать, как установить curl в Ubuntu.

Установка curl на Ubuntu

Поскольку curl – это популярное программное обеспечение с открытым исходным кодом, которое используется уже более двадцати лет, Ubuntu включает его в основной репозиторий.

Это означает, что установка curl в Ubuntu – это всего лишь одна команда. Но прежде чем устанавливать curl, я предлагаю сначала обновить локальный кеш пакетов.

Откройте терминал (используйте сочетание клавиш Ctrl + Alt + T в Ubuntu) и используйте следующую команду для обновления кэша пакетов Ubuntu:

sudo apt update

Теперь, когда вы обновили кеш, вы можете установить curl с помощью команды apt следующим образом:

sudo apt install curl

Что может быть проще, не так ли? После завершения установки вы можете проверить, все ли прошло нормально, используя команду:

curl --version

Эта команда покажет вам текущую установленную версию curl. На момент написания этой статьи вот что у меня получилось (у вас должно быть похожее):

curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
Release-Date: 2018-01-24
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL

Что может сделать CURL?

Хм … Все, что связано с передачей данных. Каждый пользователь использует браузер. Даже сейчас вы читаете эту статью через браузер. Что делает браузер, он запрашивает страницу и получает ее в ответ. Он может писать и читать куки. И затем он рендерит (отображает содержимое, изображения и исполняет сценарии JS).

CURL может делать все тоже что и браузер, за исключением последней части рендеринга, потому что это не связано с передачей данных. В заключение, CURL может загружать HTML-страницы, заполнять HTML-формы и отправлять их, загружать файлы с FTP/HTTP-сервера и загружать файлы на них, а также читать/записывать файлы cookie. Это делает его отличным инструментом для написания сценариев, отладки и криминалистического анализа и т. д.

Примеры команд Curl

Давайте посмотрим, что вы можете сделать с Curl.

1. Получить ответ от сервера. Получение HTML-страницы аналогично загрузке файла. Чтобы получить HTML-ответ от http://info.cern.ch введите

curl http://info.cern.ch/

Чтобы получить список сообщений в качестве ответа от сервера ( https://jsonplaceholder.typicode.com/posts ),

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

Поскольку мы знаем, как получить ответ от сервера, мы можем загрузить файл (например, логотип Google).

curl https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

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

Обратите внимание, что различные флаги параметров могут быть размещены в любом месте команды вместо строгого назначения. Так что не беспокойтесь, если вы поместили какую-либо опцию в конец, в то время как примеры имели флаг в начале.

2. Сохраните файл с именем файла по умолчанию. Каждый файл, который подается в Интернете, имеет имя файла. Чтобы использовать то же имя файла, что и загруженное имя файла, используйте флаг -O.

curl -O http://www.google.com/robots.txt

3. Сохраните файл с произвольным именем. Чтобы сохранить имя файла под своим собственным именем, используйте флаг -o, за которым (строго) следует пользовательское имя.

curl -O http://www.google.com/robots.txt googleRobots.txt

4. Скачать несколько файлов. Чтобы загрузить несколько файлов, разделите их пробелами.

curl url1 url2 url3 

Если вы хотите использовать флаг -O для всех URL, используйте

curl url1 url2 url3 -O -O -O

Тот же обходной путь должен быть сделан для любого флага. Это связано с тем, что первое вхождение определенного флага относится к первому URL, второе – к второму URL и т. д.

5. Загрузите ряд файлов. У curl есть встроенная возможность загружать ряд файлов с сервера. Это можно проиллюстрировать на следующем примере.

curl http://www.google.com/logo/logo[1-9].png

Выше команда загрузит файлы начиная от logo1.png, logo2.png, logo3.png и до logo9.png.

6. Возобновить загрузку. Если вы уже частично перенесли файл, вы можете возобновить передачу, используя флаг -C. Смещение, с которого необходимо продолжить передачу, следует передать в качестве параметра для флага -C.

curl -C 1024 https://linuxcool.ru/files/largeFile.mpv -O

7. Выгрузить файл. Чтобы загрузить файл на сервер, необходимо использовать флаг -T с указанием пути к файлу в вашей локальной системе.

curl -T uploadFile.txt https://linuxcool.ru/files

8. Удалить файл. Чтобы удалить файл с именем deleteFile.txt на сервере, можно использовать флаг -X, который предназначен для любого глагола/метода HTTP (например, GET, POST, PUT, DELETE, PATCH). Большинство FTP-серверов имеют настроенный метод DELETE, если не все расширенные методы HTTP.

curl -X DELETE https://linuxcool.ru/files/deleteFile.txt

Вы также можете изменить указанную выше команду для любого метода HTTP, чтобы выполнить соответствующую задачу. Например, если на вашем сервере разрешен метод TRUNCATE (это метод HTTP, а не стандартный), который удаляет только содержимое, а не файла, можно использовать команду, аналогичную приведенной ниже.

curl -X TRUNCATE https://linuxcool.ru/files/mysql.dump

Выше были упомянуты основные виды использования curl. Но могут возникнуть трудности с которыми необходимо бороться, такие как перенаправления, аутентификация пользователей, SSL-сертификаты и т. д. Мы можем называть их надстройками, поскольку они являются необязательными, но при этом остаются важными для определенных целей.

Давайте посмотрим на некоторые из этих аддонов и как справиться с этим с помощью curl в следующем разделе.

9. Избегайте перенаправлений. Когда вы запрашиваете http://www.google.com, вам будет представлена только региональная страница, такая как www.google.ru. Это делается с помощью перенаправлений (HTTP-пакеты с кодами состояния в диапазоне 300-399). Вы можете избежать перенаправлений с опцией –L.

curl -L htttp://www.google.com

10. Аутентификация. Когда сервер настроен для обслуживания только определенных лиц с учетными данными, им будут предоставлены имя пользователя и пароль. Войти в систему можно с помощью флага -u.

curl -u username:password https://linuxcool.ru/files/tasks.txt

11. Ограничить передачу данных. Если вы хотите установить лимит передачи данных, используйте флаг –limit-rate. Следующая команда попытается загрузить файл с ограничением скорости 10K.

curl --limit-rate 10K https://linuxcool.ru/files/logoDetails.tgz

12. Показать/Скрыть статус передачи. Если ответ перенаправляется из терминала, например при загрузке, в curl автоматически отображается индикатор состояния/хода выполнения для передачи. Если вы не хотите видеть индикатор прогресса, просто добавьте команду с флагом -s. Прогресс не будет показан для ответа, направленного на терминал.

13. Игнорировать SSL-сертификаты. Помните ли вы ситуации, когда вам нужно было выдавать исключение сертификата безопасности для посещения некоторых веб-сайтов? Если вы доверяете источникам и хотите выполнить передачу данных, вы можете игнорировать проверку сертификата SSL с помощью флага -k.

curl -k https://notSoSecure.org/files/logoDetails.tgz

14. Получить информацию заголовка. Чтобы отобразить информацию заголовка вместе с переданными данными, используйте флаг -i.

curl -i http://www.google.com/robots.txt

15. Получить только информацию заголовка. Если вам нужны только заголовки, а не данные, используйте флаг -I

curl -I http://www.google.com/robots.txt

16. Изменить User-Agent. Некоторые веб-сайты и серверы не позволяют определенным типам устройств получать доступ к своим системам. Но как они узнают, что мы используем устройство определенного типа? Это связано с полем заголовка HTTP User-Agent. Мы можем изменить этот пользовательский агент с флагом -A.

curl -A "Mozilla FireFox(42.0)" http://notAllowedForCLI.sites.org/randomFile.png

17. Отправка данных на сервер. Если серверу нужны некоторые данные такие как токен или ключ API, используйте флаг -d для отправки данных. Данные, которые необходимо отправить, должны следовать за флагом в команде. Можно использовать «&» для объединения нескольких данных. Обычно это делается с помощью запросов GET и POST в браузерах. Это один из способов отправки информации о форме.

curl -d "token=34343abvfgh&name='seeni'" http://api.restful.org/getcontent

18. Записать куки в файл. Файлы cookie представляют собой небольшую информацию, которая позволяет поддерживать сеанс с протоколом HTTP без сохранения состояния. Чтобы записать cookie в файл, следует использовать флаг -c с именем файла cookie.

curl -c googleCookie.txt http://www.google.com/files

19. Чтение cookie из файла. Чтобы прочитать cookie из файла, можно использовать флаг -b и имя файла cookie.

curl -b googleCookie.txt http://www.google.com/files

Обратите внимание, что флаг -b читает cookie только из файла. Поэтому, если сервер повторно отправляет другой файл cookie, вам может понадобиться использовать опцию -c для их записи.

20. Начать новую сессию. Если вы хотите начать новый сеанс, отбросив куки, используйте флаг -j. Он начинает новый сеанс, даже если вы предоставили файл cookie для чтения с флагом -b.

curl -b googleCookie.txt http://www.google.com/files -j

Поздравляем! Вы сделали все до конца. Если вы найдете эту статью полезной, поделитесь ею с друзьями и подпишитесь на нас в социальных сетях.

А знаете ли вы что:
Curl изначально назывался urlget. Позже он был переименован в httpget и в конечном итоге переименован в curl. Кстати, curl означает «URL клиента».

Остались вопросы? Не стесняйтесь, оставьте комментарий ниже.