Cum să utilizați curl pentru a descărca fișiere de pe linia de comandă Linux

Comanda Linux curl oferă funcționalități extinse, depășind simpla descărcare a fișierelor. Descoperă potențialul real al curl și situațiile în care este preferabil în locul wget.

curl vs. wget: Diferențe esențiale

Adesea, utilizatorii se confruntă cu dificultăți în a distinge avantajele relative ale comenzilor wget și curl. Deși există o anumită suprapunere funcțională, fiecare comandă are un scop principal diferit. Ambele pot prelua fișiere de la distanță, însă aici se termină similaritățile.

wget este un instrument excelent pentru descărcarea conținutului și fișierelor. Poate descărca fișiere, pagini web și directoare, având abilități de a naviga prin link-urile paginilor web și de a descărca recursiv conținutul unui întreg site. Este un manager de descărcare excelent în linia de comandă.

Pe de altă parte, curl satisface un scop diferit. Deși poate prelua fișiere, nu poate naviga recursiv pe un site web. curl permite interacțiunea cu sisteme de la distanță, trimițând cereri și primind răspunsuri. Aceste răspunsuri pot include conținutul paginilor web, fișiere, dar și date furnizate de servicii web sau API-uri ca rezultat al cererilor curl.

Mai mult, curl nu se limitează la site-uri web. Suportă peste 20 de protocoale, inclusiv HTTP, HTTPS, SCP, SFTP și FTP. Datorită capacităților sale superioare de manipulare a conductelor Linux, curl se integrează mai ușor cu alte comenzi și scripturi.

Autorul curl oferă o pagină web care detaliază diferențele dintre curl și wget.

Instalarea curl

În majoritatea sistemelor de operare moderne, curl vine preinstalat. Totuși, pe unele sisteme (cum ar fi Ubuntu 18.04 LTS), instalarea poate fi necesară. Pentru instalare pe Ubuntu, folosește comanda:

sudo apt-get install curl

Verificarea versiunii curl

Comanda --version afișează versiunea curl și lista protocoalelor acceptate:

curl --version

Preluarea unei pagini web

curl poate prelua pagini web:

curl https://www.bbc.com

Implicit, curl afișează codul sursă al paginii în terminal.

Atenție: Dacă nu se specifică salvarea într-un fișier, curl va afișa rezultatul în terminal. Acest lucru poate genera rezultate imprevizibile în cazul fișierelor binare.

Salvarea datelor într-un fișier

Pentru a salva rezultatul într-un fișier, se folosește redirecționarea:

curl https://www.bbc.com > bbc.html

De data aceasta, informațiile preluate sunt salvate direct în fișier. curl afișează informații despre progres deoarece nu există o ieșire în terminal.

În cazul afișării codului sursă direct în terminal, curl alege să nu afișeze informațiile despre progres pentru a nu le amesteca cu codul sursă.

Informațiile furnizate includ:

  • % Total: Dimensiunea totală de descărcat.
  • % primit: Procentul și cantitatea descărcată până acum.
  • % Xferd: Procentul și cantitatea trimisă (pentru încărcări).
  • Viteza medie de descărcare: Viteza medie de descărcare.
  • Viteza medie de încărcare: Viteza medie de încărcare.
  • Timp total: Timpul total estimat pentru transfer.
  • Timp petrecut: Timpul scurs până acum.
  • Timp rămas: Timpul estimat rămas.
  • Viteza curentă: Viteza de transfer curentă.

Acum avem un fișier numit „bbc.html”.

Deschiderea fișierului cu un browser va afișa pagina web preluată.

Adresa din bara de adrese este un fișier local, nu un site web.

Alternativ, putem folosi opțiunea -o pentru a crea un fișier:

curl -o bbc.html https://www.bbc.com

Utilizarea unei bare de progres

Opțiunea -# înlocuiește informațiile text cu o bară de progres:

curl -# -o bbc.html https://www.bbc.com

Reluarea unei descărcări întrerupte

Este ușor să reluați o descărcare întreruptă. Începem descărcarea unui fișier ISO Ubuntu 18.04, folosind --output pentru a specifica numele fișierului:

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

Descărcarea începe și avansează.

Întreruperea cu Ctrl+C abandonează descărcarea.

Pentru a relua descărcarea, utilizați opțiunea -C. Folosind - ca decalaj, curl analizează fișierul și determină punctul corect de reluare:

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

Descărcarea este reluată. curl afișează decalajul de reluare.

Preluarea antetelor HTTP

Opțiunea -I (head) permite preluarea doar a antetelor HTTP. Acest lucru echivalează cu trimiterea comenzii HTTP HEAD către un server web.

curl -I www.twitter.com

Această comandă nu descarcă pagini web sau fișiere, doar preia informații.

Descărcarea mai multor adrese URL

Cu xargs, se pot descărca mai multe adrese URL simultan. Pentru a descărca mai multe pagini web dintr-un articol sau tutorial, salvăm URL-urile într-un fișier (e.g., „urls-to-download.txt”) și folosim xargs pentru a procesa fiecare linie ca parametru pentru curl.

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5

Comanda pentru a trece URL-urile la curl este:

xargs -n 1 curl -O < urls-to-download.txt

Această comandă folosește opțiunea -O (fișier la distanță), salvând fișierele cu numele pe care le au pe server.

Opțiunea -n 1 face ca xargs să trateze fiecare linie ca un parametru unic.

La rularea comenzii, descărcările vor începe și se vor finaliza una după alta.

Browserul de fișiere arată că fișierele au fost descărcate, fiecare cu numele de pe serverul de la distanță.

Descărcarea de fișiere de pe un server FTP

Utilizarea curl cu un server FTP este simplă, chiar și cu autentificare (nume de utilizator și parolă). Se folosește opțiunea -u, urmată de numele de utilizator, două puncte (:) și parola, fără spații.

Un server FTP gratuit pentru testare este găzduit de Rebex. Are numele de utilizator „demo” și parola „password.” Nu utiliza astfel de credențiale pe servere FTP reale.

curl -u demo:password ftp://test.rebex.net

curl identifică serverul FTP și afișează lista de fișiere prezente.

Singurul fișier de pe server este „readme.txt” cu 403 octeți. Pentru a-l prelua, folosim aceeași comandă, adăugând numele fișierului:

curl -u demo:password ftp://test.rebex.net/readme.txt

Fișierul este preluat și conținutul afișat în terminal.

Pentru a salva fișierul pe disc, se folosește comanda -O (fișier la distanță):

curl -O -u demo:password ftp://test.rebex.net/readme.txt

Fișierul este salvat pe disc, cu același nume și dimensiune (403 octeți).

ls -hl readme.txt

Trimiterea parametrilor către servere la distanță

Unele servere acceptă parametri în cereri. Acești parametri pot fi folosiți pentru formatarea datelor, selectarea datelor sau pentru interacțiunea cu API-uri. curl permite interacțiunea cu interfețele de programare a aplicațiilor (API).

De exemplu, site-ul ipify are un API pentru a afla adresa IP externă:

curl https://api.ipify.org

Adăugând parametrul format=json, datele returnate vor fi în format JSON:

curl https://api.ipify.org?format=json

Un alt exemplu, folosind API-ul Google Books, returnează un obiect JSON ce descrie o carte. Parametrul necesar este ISBN. Un exemplu este „0131103628”:

curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628

Datele returnate sunt detaliate:

Când se utilizează curl și când se utilizează wget

Pentru descărcarea conținutului unui site web cu structura recursivă, wget este mai potrivit. Pentru interacțiunea cu servere la distanță, API-uri, precum și descărcarea de fișiere sau pagini web (mai ales dacă protocolul nu este suportat de wget), curl este preferabil.