Как да използвате команда 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 -- версия за да провери дали къдрица е инсталиран.

В случай, че къдрица не е инсталиран, използвайте следните стъпки.

На базирани на Ubuntu и Debian системи, използвайте:

sudo apt-получи актуализация
sudo apt-get install curl

На RHEL, CentOs и Fedora дистрибуции, използвайте:

sudo yum инсталирайте curl

Сега използвайте curl -- версия команда, за да се уверите, че е инсталиран правилно.

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.1) ng02/ 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 telnet tftp Характеристики: Asynchbent ftps tftp telnet tftp идентификатор: AsynchNTBSLNTGN SPERGE libz TLS-SRP HTTP2 UnixSockets HTTPS-прокси PSL gaurav@ubuntu:~$ 

Сега сме готови да използваме къдрица команда.

Опции, налични с команда CURL

Нека първо хвърлим поглед към някои от изявените опции, налични с къдрица команда.

ОпцияОписание
-uза изтегляне на файлове от FTP сървър
-° Сза да възобновите прекъснато изтегляне
за да запазите резултата от къдрица команда с предварително дефинирано име на файл
-азза да получите HTTP заглавките на дефиниран URL адрес
за да запазите резултата от къдрица команда с оригиналното име на файла
--libcurlза извеждане на изходния код на C, който използва libcurl за посочената опция
да използвате прокси за достъп до URL адреса
-#за да се покаже лентата на напредъка, за да се покаже състоянието на изтегляне

Извличане на уеб страница с помощта на CURL

В къдрица команда, когато се използва без опция, извлича съдържанието на URL адреса, посочен в командата.

Синтаксис:

къдрица [URL]

пример:

къдрица //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:автоматично!важно;позиция:абсолютно!важно;горе:0!важно;ляво:0!важно;вдясно:0!важно;отдолу:0!важно;марж:0!важно;дисплей:блок!важно} 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 плътно прозрачен!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-experiment,amp-live-list>[update]{display :none}.i-amphtml-jank-meter{position:fixed;background-color:rgba(232,72,95,0.5);bottom:0;right:0;color:#fff;font-size:16px; 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[самостоятелен]{background- цвят:#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 плътен 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} 

Тук съдържанието на уеб страницата се извлича директно във вашия терминал като изходен код.

Можете да използвате опции и с къдрица команда за съхраняване на това съдържание във файл.

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

Синтаксис:

curl -o [userdefined_filename] [URL]

пример:

gaurav@ubuntu:~/workspace$ curl -o ath.html //allthings.how % Общ % получен % 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

Използвайки опцията с командата curl също запазва съдържанието или уеб страницата или пакет за изтегляне като файл, но запазва този файл с оригиналното му име.

Нека да видим това чрез пример:

пример:

Тук съм използвал къдрица команда с опция за изтегляне на пакет 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 % Общ % получен % 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 в терминала процесът се прекъсва.

В къдрица команда, когато се използва с -° С опцията възобновява прекъснато изтегляне.

Синтаксис:

curl -C - -O [URL]

пример:

В тази илюстрация се опитах да изтегля Ubuntu 20.04 ISO изображение от уебсайта на Ubuntu.

gaurav@ubuntu:~/workspace$ curl -O //releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso?_ga=2.212264532.1184373179.1600250795 Speed. Време Време Време Текущо изтегляне Качване Обща изразходвана лява скорост 0 2656M 0 1744k 0 0 87038 0 8:53:17 0:00:20 8:52:57 77726^C

Тук умишлено прекратих процеса на изтегляне от Ctrl+C.

Сега ще използвам -° С опция с къдрица команда за възобновяване на прекъснато изтегляне от същия уебсайт източник.

Изход:

gaurav@ubuntu:~/workspace$ curl -C - -O //releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso?_ga=2.212264532.1184373179.16002490 прехвърляне**16002450 позиция на байта 1851392 % Общ % получен % Xferd Средна скорост Време Време Време Текущо изтегляне Качване Обща изразходвана лява скорост 0 2654M 0 20.2M 0 0 57940 0 13:20:35 0:06:06 13:14:28

Изтеглянето е взето от мястото, където е прекратено.

Изтегляне на файлове от 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 % Общо % получено % Xfer Скорост Време Време Време Текущо изтегляне Качване Обща изразходвана оставена скорост 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 Sep 16 10:22 .. -rw-r--r-- 1 gaurav gaurav 390 Sep 16 16:15 16-Sep-20-16-0-0.csv -rw- r--r-- 1 gaurav gaurav 204429 16 септември 11:45 ath.html gaurav@ubuntu:~/workspace$

Изтегляне на няколко файла заедно с помощта на CURL

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

Синтаксис:

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 8 05 :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 Sep 16 10:22 .. -rw-r--r-- 1 gaurav gaurav 390 Sep 16 16:15 16-Sep-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_9. 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-Options: SAMEORIGIN Transfer-Encoding: chunked Изтича: сряда, 16 септември 2020 г., 11:17:00 GMT Cache- Контрол: частен Set-Cookie: 1P_JAR=2020-09-16-11; expires=пет, 16 октомври 2020 г. 11:17:00 GMT; път =/; domain=.google.com; Закрепете Set-Cookie: NID = 204 = SpeHTVXkKYwe6uaKYLsPWmCA0A-sGb94c9jpbw067e7uhyeJnkap6TFEIESztwLOEst7KcDSBLgGrokh1EM2IZi2VPVzllH0tsvCu-QbKiunPoPJ6dD7oAnB7rxu30rAiO630vYm6SG1zbmGgxNEiB-adXp24h7iEoSq9WsjrGg; expires=Чет, 18 март 2021 11:17:00 GMT; път =/; domain=.google.com; HttpOnly gaurav@ubuntu:~/workspace$

В този пример извадих HTTP заглавките на ‘www.firefox.com‘.

Извличане на C-изходен код с помощта на CURL

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

Синтаксис:

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

пример:

В този пример извадих съдържанието на URL адреса всичко.как и го съхранява във файл с име gy_ath.html. Изходният код на C се съхранява отделно в източник.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 общо 404 drwxrwxr-x 3 gaurav gaurav 4096 16 септември 17:08 . drwxr-xr-x 87 gaurav gaurav 266240 Sep 16 10:22 .. -rw-r--r-- 1 gaurav gaurav 0 Sep 16 17:13 gy_ath.html -rw-r--r-- 1 gaurav gaurav 1535 16 септември 17:13 source.c gaurav@ubuntu:~/workspace$

В източник.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 [прокси_адрес]:[порт] [URL]

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

curl -u [потребителско име]:[парола] -x [прокси_адрес]:[порт] [URL]

Използвайки този прост метод, можем да прехвърляме файлове през прокси сървър с опция използван с къдрица команда.

Заключение

В този кратък урок научихме как къдрица командата се оказва полезна при изтегляне на съдържание директно от вашия терминал. Научихме и за различните опции, налични с тази команда, която да се използва за различни задачи.

Категория: Linux