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 клиента».
Остались вопросы? Не стесняйтесь, оставьте комментарий ниже.