Как использовать команду Curl в Linux

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

В завиток command - еще одна интересная утилита командной строки, которую Linux может вам предложить. завиток Команда позволяет пользователю получать файлы с сервера.

завиток является популярным выбором разработчиков приложений и частых пользователей Linux из-за поддержки ряда протоколов, таких как RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, HTTP, HTTPS, FTP, FTPS, IMAP, IMAPS, DICT, FILE, GOPHER, LDAP, LDAPS, POP3, POP3S и т. Д.

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

Установка

Перед использованием завиток , проверьте, не установлена ​​ли она в вашей системе. Используйте команду curl --version чтобы проверить, если завиток установлен.

В случае если завиток не установлен, выполните следующие действия.

В системах на основе Ubuntu и Debian, использовать:

sudo apt-get update
sudo apt-get install curl

В дистрибутивах RHEL, CentOs и Fedora, использовать:

sudo yum установить завиток

Теперь используйте curl --version , чтобы убедиться, что он установлен правильно.

curl --version

Вывод:

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 Дата выпуска: 2018-01-24 Протоколы: файл dict ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp Особенности: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-прокси PSL gaurav @ ubuntu: ~ $ 

Теперь мы готовы использовать завиток команда.

Параметры, доступные с командой CURL

Давайте сначала взглянем на некоторые из выдающихся опций, доступных с завиток команда.

ВариантОписание
-uдля загрузки файлов с FTP-сервера
-Cвозобновить прерванную загрузку
чтобы сохранить результат завиток команда с предопределенным именем файла
чтобы получить HTTP-заголовки определенного URL-адреса
-Oчтобы сохранить результат завиток команда с исходным именем файла
--libcurlдля вывода исходного кода C, который использует libcurl для указанного варианта
-Иксиспользовать прокси для доступа к URL
-#для отображения индикатора выполнения для отображения статуса загрузки

Получение веб-страницы с помощью CURL

В завиток Команда, при использовании без какой-либо опции, извлекает содержимое URL-адреса, указанного в команде.

Синтаксис:

curl [URL]

Пример:

curl //allthings.how

Вывод:

gaurav @ ubuntu: ~ $ curl //allthings.how html {overflow-x: hidden! important} html.i-amphtml-fie {height: 100%! important; width: 100%! important} html: not ([amp4ads ]), html: not ([amp4ads]) body {height: auto! important} html: not ([amp4ads]) body {margin: 0! important} body {-webkit-text-size-adjust: 100%; - moz-text-size-adjust: 100%; - ms-text-size-adjust: 100%; text-size-adjust: 100%} html.i-amphtml-singledoc.i-amphtml-embedded {-ms-touch -action: pan-y; touch-action: pan-y} html.i-amphtml-fie> body, html.i-amphtml-singledoc> body {overflow: visible! important} html.i-amphtml-fie: not (.i-amphtml-inabox)> body, html.i-amphtml-singledoc: not (.i-amphtml-inabox)> body {position: relative! important} html.i-amphtml-webview> body {overflow-x : hidden! important; overflow-y: visible! important; min-height: 100vh! important} html.i-amphtml-ios-embed-legacy> body {overflow-x: hidden! important; overflow-y: auto! important ; position: absolute! important} html.i-amphtml-ios-embed {overflow-y: auto! important; position: static} # i-amphtml-wrapper {overflow-x: hidden! important; over flow-y: auto! important; position: absolute! important; top: 0! important; left: 0! important; right: 0! important; bottom: 0! important; margin: 0! important; display: block! important} html.i-amphtml-ios-embed.i-amphtml-ios-overscroll, html.i-amphtml-ios-embed.i-amphtml-ios-overscroll> # i-amphtml-wrapper {-webkit-overflow-scrolling: touch! important} # i-amphtml-wrapper> body {position: relative! important; border-top: 1px solid transparent! important} # i-amphtml-wrapper + body {visibility: visible} # i-amphtml-wrapper + body .i-amphtml-lightbox-element, # i-amphtml-wrapper + body [i-amphtml-lightbox] {visibility: hidden} # i-amphtml-wrapper + body [i-amphtml-lightbox] .i-amphtml-lightbox -element {visibility: visible} # i-amphtml-wrapper.i-amphtml-scroll-disabled, .i-amphtml-scroll-disabled {overflow-x: hidden! important; overflow-y: hidden! important} amp-instagram {padding: 54px 0px 0px! important; background-color: #fff} amp-iframe iframe {box-sizing: border-box! important} [amp-access] [amp-access-hide] {display: none} [подписки -dialog], body: not (.i-amphtml-s ubs-ready) [subscriptions-action], body: not (.i-amphtml-subs-ready) [subscriptions-section] {display: none! important} amp-эксперимент, amp-live-list> [update] {display : none} .i-amphtml-jank-meter {позиция: фиксированная; цвет фона: rgba (232,72,95,0.5); внизу: 0; справа: 0; цвет: #fff; размер шрифта: 16 пикселей; z-index: 1000; padding: 5px} amp-list [resizable-children]>. i-amphtml-loading-container.amp-hidden {display: none! important} amp-list [fetch-error], amp-list [load-more] [load-more-button], amp-list [load-more] [load-more-end], amp-list [load-more] [load-more-failed], amp-list [load -more] [load-more-loading] {display: none} amp-list [diffable] div [role = list] {display: block} amp-story-page, amp-story [standalone] {min-height: 1px ! important; display: block! important; height: 100%! important; margin: 0! important; padding: 0! important; overflow: hidden! important; width: 100%! important} amp-story [standalone] {background- color: # 202125! important; position: relative! important} amp-story-page {background-color: # 757575} amp-story .amp-active> div, amp-story .i-amphtm l-loader-background {display: none! important} amp-story-page: not (: first-of-type): not ([distance]): not ([active]) {transform: translateY (1000vh)! important } amp-autocomplete {position: relative! important; display: inline-block! important} amp-autocomplete> input, amp-autocomplete> textarea {padding: 0.5rem; border: 1px solid rgba (0,0,0,0.33) } .i-amphtml-autocomplete-results, amp-autocomplete> input, amp-autocomplete> textarea {font-size: 1rem; line-height: 1.5rem} [amp-fx ^ = fly-in] {visibility: hidden} amp-script [nodom] {position: fixed! important; top: 0! important; width: 1px! important; height: 1px! important; overflow: hidden! important; visibility: hidden} 

Здесь содержимое веб-страницы загружается прямо на ваш терминал в виде исходного кода.

Вы можете использовать опции и -O с завиток команда для сохранения этого содержимого в файл.

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

Синтаксис:

curl -o [имя_пользовательского_файла] [URL]

Пример:

gaurav @ ubuntu: ~ / workspace $ curl -o ath.html //allthings.how% Total% Received% Xferd Средняя скорость Время Время Время Текущая загрузка загрузки Всего потрачено Оставшаяся скорость 100 199k 100 199k 0 0 58743 0 0:00:03 0:00:03 -: -: - 58743 gaurav @ ubuntu: ~ / workspace $ ls ath.html gaurav @ ubuntu: ~ / workspace $ 

В этом примере содержимое URL-адреса allthings.how сохраняется как HTML-файл с именем ath.html в моем текущем рабочем каталоге. При открытии этого HTML-файла я буду перенаправлен на сохраненную веб-страницу.

Скачивание файлов с помощью команды CURL

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

Давайте посмотрим на это на примере:

Пример:

Здесь я использовал завиток команда с -O возможность загрузить пакет Ubuntu с именем ‘cherrytree_0.37.6-1.1_all.deb‘Из репозитория пакетов Ubuntu.

gaurav @ ubuntu: ~ / workspace $ curl -O //kr.archive.ubuntu.com/ubuntu/pool/universe/c/cherrytree/cherrytree_0.37.6-1.1_all.deb% Total% Received% Xferd Средняя скорость Время Время Время Текущая загрузка загрузки Всего затрачено Оставшаяся скорость 100 613k 100 613k 0 0 220k 0 0:00:02 0:00:02 -: -: - 220k gaurav @ ubuntu: ~ / workspace $

Вывод:

trinity @ ubuntu: ~ / workspace $ ls ath.html cherrytree_0.37.6-1.1_all.deb trinity @ ubuntu: ~ / workspace $

Итак, пакет загружен и сохранен в текущем рабочем каталоге (CWD) под своим исходным именем.

Отображение индикатора выполнения при загрузке файла

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

Давайте посмотрим на пример этой настройки.

Синтаксис:

curl - # -O [URL]

Пример:

gaurav @ ubuntu: ~ / workspace $ curl - # -O //archive.ubuntu.com/ubuntu/pool/main/e/emacs-defaults/emacs-defaults_47.0.tar.xz ######## ########################################################################### ########################################################################### ################################## 100.0% gaurav @ ubuntu: ~ / workspace $ 

Вывод:

gaurav @ ubuntu: ~ / workspace $ ls ath.html cherrytree_0.37.6-1.1_all.deb emacs-defaults_47.0.tar.xz gaurav @ ubuntu: ~ / workspace $ 

В этом выводе вы можете заметить, что я загрузил пакет с именем ‘emacs-defaults_47.0.tar.xz‘В моем CWD, и индикатор выполнения отображается в терминале во время загрузки.

Возобновление прерванной загрузки в CURL

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

В завиток команда при использовании с -C опция возобновляет прерванную загрузку.

Синтаксис:

curl -C - -O [URL]

Пример:

На этой иллюстрации я попытался загрузить ISO-образ Ubuntu 20.04 с веб-сайта Ubuntu.

gaurav @ ubuntu: ~ / workspace $ curl -O //releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso?_ga=2.212264532.1184373179.1600250922-1570904140.1591164974% Всего% Получено% Средняя скорость Xferd Время Время Время Текущая загрузка Загрузка Всего затрачено Оставшаяся скорость 0 2656M 0 1744k 0 0 87038 0 8:53:17 0:00:20 8:52:57 77726 ^ C

Здесь я намеренно прервал процесс загрузки, Ctrl + C.

Теперь я воспользуюсь -C вариант с завиток команда для возобновления прерванной загрузки с того же исходного веб-сайта.

Вывод:

gaurav @ ubuntu: ~ / workspace $ curl -C - -O //releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso?_ga=2.212264532.1184373179.1600250922-1570904140.1591164974 ** Возобновление передачи из позиция байта 1851392% Всего% Получено% Xferd Средняя скорость Время Время Время Текущая загрузка загрузки Всего затрачено Оставшаяся скорость 0 2654M 0 20,2M 0 0 57940 0 13:20:35 0:06:06 13:14:29 98278

Загрузка была продолжена с того места, где она была прервана.

Скачивание файлов с FTP-сервера с помощью CURL

Это довольно просто с завиток команда для загрузки файла с FTP-сервера с помощью -u вариант. Вы должны ввести имя пользователя и пароль в команду перед вводом URL-адреса.

Синтаксис:

curl -u [имя пользователя]: [пароль] [URL]

Для иллюстрации я буду использовать общедоступный онлайн-протокол FTP.

Пример:

gaurav @ ubuntu: ~ / workspace $ curl -O -u [email protected]: eUj8GeW55SvYaswqUyDSm5v6N ftp://ftp.dlptest.com/16-Sep-20-16-0-0.csv% Всего% полученных% Среднее значение Xferd Скорость Время Время Время Текущая загрузка Загрузка Всего затрачено Оставшаяся скорость 100 390 100 390 0 0 93 0 0:00:04 0:00:04 -: -: - 93 gaurav @ ubuntu: ~ / workspace $

Здесь я загрузил файл с именем ‘16-сен-20-16-0-0.csv ’ с этого ftp-сервера и сохранил его с исходным именем в моем CWD. Я проверю загруженный файл с помощью ls команда.

gaurav @ ubuntu: ~ / workspace $ ls -al всего 1092 drwxrwxr-x 3 gaurav gaurav 4096 16 сен, 16:15. drwxr-xr-x 87 gaurav gaurav 266240 16 сен 10:22 .. -rw-r - r-- 1 gaurav gaurav 390 16 сен 16:15 16 сен-20-16-0-0.csv -rw- r - r-- 1 gaurav gaurav 204429, 16 сентября, 11:45 ath.html gaurav @ ubuntu: ~ / workspace $

Загрузка нескольких файлов вместе с использованием CURL

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

Синтаксис:

curl -O [URL-1] -O [URL-2] -O [URL-n]

Пример:

gaurav @ ubuntu: ~ / workspace $ curl -O //archive.ubuntu.com/ubuntu/pool/universe/a/aegean/aegean_0.15.2+dfsg-1.debian.tar.xz -O //archive.ubuntu. com / ubuntu / pool / main / a / apache2 / apache2_2.4.29.orig.tar.gz% Всего% получено% Xferd Средняя скорость Время Время Время Текущая загрузка загрузки Всего затрачено Оставшаяся скорость 100 63500 100 63500 0 0 55458 0 0:00 : 01 0:00:01 -: -: - 55458 100 8436k 100 8436k 0 0 123k 0 0:01:08 0:01:08 -: -: - 127k gaurav @ ubuntu: ~ / workspace $ 

В этом примере я загрузил два разных пакета из репозитория Ubuntu.

Вывод:

gaurav @ ubuntu: ~ / workspace $ ls -al всего 9596 drwxrwxr-x 3 gaurav gaurav 4096 16 сен, 16:28. drwxr-xr-x 87 gaurav gaurav 266240 16 сен 10:22 .. -rw-r - r-- 1 gaurav gaurav 390 16 сен 16:15 16 сен-20-16-0-0.csv -rw- r - r-- 1 gaurav gaurav 63500 16 сен 16:28 aegean_0.15.2 + dfsg-1.debian.tar.xz -rw-r - r-- 1 gaurav gaurav 8638793 16 сен 16:29 apache2_2.4.29. orig.tar.gz -rw-r - r-- 1 gaurav gaurav 204429, 16 сентября, 11:45 ath.html gaurav @ ubuntu: ~ / workspace $ 

Два пакета загружаются одновременно с помощью команды curl.

Получение HTTP-заголовков URL-адреса с помощью CURL

Поля HTTP-заголовков любого URL-адреса содержат полезную информацию, такую ​​как пользовательский агент, тип содержимого, кодировка и т. Д. Эти файлы заголовков также предоставляют информацию об объекте, отправленном в теле сообщения. Подробная информация о запросе и ответе также получается из этих заголовков HTTP.

Ты можешь использовать завиток команда с возможность получить эти HTTP-заголовки URL-адреса.

Синтаксис:

curl -I [URL]

Пример:

gaurav @ ubuntu: ~ / workspace $ curl -I www.firefox.com HTTP / 1.1 200 OK Content-Type: text / html; charset = ISO-8859-1 P3P: CP = "Это не политика P3P! Дополнительную информацию см. на g.co/p3phelp." Дата: среда, 16 сентября 2020 г. 11:17:00 GMT Сервер: gws X-XSS-Protection: 0 Параметры X-Frame: SAMEORIGIN Кодирование передачи: фрагментировано Истекает: среда, 16 сентября 2020 г. 11:17:00 GMT Cache- Управление: частный Set-Cookie: 1P_JAR = 2020-09-16-11; expires = Fri, 16-Oct-2020 11:17:00 GMT; путь = /; домен = .google.com; Безопасный Set-Cookie: NID = 204 = SpeHTVXkKYwe6uaKYLsPWmCA0A-sGb94c9jpbw067e7uhyeJnkap6TFEIESztwLOEst7KcDSBLgGrokh1EM2IZi2VPVzllH0tsvCu-QbKiunPoPJ6dD7oAnB7rxu30rAiO630vYm6SG1zbmGgxNEiB-adXp24h7iEoSq9WsjrGg; expires = Thu, 18-Mar-2021 11:17:00 GMT; путь = /; домен = .google.com; HttpOnly gaurav @ ubuntu: ~ / рабочая область $

В этом примере я получил HTTP-заголовки ‘www.firefox.com‘.

Получение исходного кода C с использованием CURL

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

Синтаксис:

curl [URL]> имя файла --libcurl [код_файла]

Пример:

В этом примере я получил содержимое URL-адреса allthings.how и сохранил его в файле с именем gy_ath.html. Исходный код C хранится отдельно в source.c файл.

curl //www.allthings.how> gy_ath.html --libcurl source.c 

Вывод:

gaurav @ ubuntu: ~ / workspace $ curl //www.allthings.how> gy_ath.html --libcurl source.c% Всего% Получено% Xferd Средняя скорость Время Время Время Время Текущая загрузка загрузки Всего затрачено Оставшаяся скорость 0 0 0 0 0 0 0 0 -: -: - 0:00:01 -: -: - 0 gaurav @ ubuntu: ~ / workspace $

Давайте теперь проверим загруженные файлы.

gaurav @ ubuntu: ~ / workspace $ ls -al total 404 drwxrwxr-x 3 gaurav gaurav 4096 16 сен 17:08. drwxr-xr-x 87 gaurav gaurav 266240 16 сен 10:22 .. -rw-r - r-- 1 gaurav gaurav 0 16 сен 17:13 gy_ath.html -rw-r - r-- 1 гарав гарав 1535 16 сен, 17:13 source.c gaurav @ ubuntu: ~ / workspace $

В source.c файл содержит исходный код. Это можно отобразить на терминале с помощью Кот команда. Я поместил несколько строк из вывода в приведенный ниже блок.

C sourcegaurav @ ubuntu: ~ / workspace $ cat source.c / ********* Пример кода, сгенерированный инструментом командной строки curl ********** * Все параметры curl_easy_setopt () задокументированы по адресу: * //curl.haxx.se/libcurl/c/curl_easy_setopt.html ******************************* *************************************** / #include int main (int argc, char * argv []) {CURLcode ret; CURL * hnd; hnd = curl_easy_init (); curl_easy_setopt (hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt (hnd, CURLOPT_URL, "//www.allthings.how"); curl_easy_setopt (hnd, CURLOPT_USERAGENT, "curl / 7.58.0"); curl_easy_setopt (hnd, CURLOPT_MAXREDIRS, 50L);

Использование прокси в CURL для доступа к URL

Как обсуждалось во введении, завиток Команда поддерживает широкий спектр протоколов, таких как FTP, SMTP, HTTPS, SOCKS и т. д. Иногда использование прокси-сервера для передачи файлов становится важным, когда вы хотите повысить скорость передачи, а также защитить свою личность. завиток можно легко использовать для передачи файлов через прокси-сервер, добавив -Икс вариант к этому.

Пример:

curl -x [proxy_address]: [порт] [URL]

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

curl -u [имя пользователя]: [пароль] -x [proxy_address]: [порт] [URL]

Используя этот простой метод, мы можем передавать файлы через прокси-сервер с опцией -Икс используется с завиток команда.

Вывод

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

Категория: Linux