Cum să descarci fișiere cu curl
curl este unul dintre cele mai versatile instrumente de linie de comandă pentru descărcarea fișierelor prin HTTP, HTTPS, FTP și zeci de alte protocoale. Fie că trebuie să salvezi un singur răspuns API într-un fișier sau să automatizezi descărcări în masă într-un script shell, curl are o opțiune pentru asta. Acest ghid acoperă toate opțiunile legate de descărcare — de la salvarea simplă a fișierelor cu -o și -O până la reluarea transferurilor întrerupte cu -C -, limitarea lățimii de bandă cu --limit-rate și afișarea barelor de progres. Fiecare opțiune include o explicație clară, modele de utilizare comune și un exemplu gata de copiat.
Referință rapidă opțiuni de descărcare
Scrie ieșirea într-un fișier cu numele specificat în loc de stdout
Scrie ieșirea într-un fișier cu numele fișierului de pe server
Urmărește automat redirecționările HTTP 3xx
Continuă/reia un transfer de fișier anterior
Limitează viteza de transfer la rata specificată
Refuză descărcarea fișierelor mai mari decât dimensiunea specificată
Folosește antetul Content-Disposition pentru a denumi fișierul
Afișează progresul transferului ca o bară de progres simplă
Furnizează utilizator:parolă pentru autentificarea pe server
Reîncearcă transferul la erori tranzitorii (număr de încercări)
Așteaptă acest număr de secunde între reîncercări
Încarcă un fișier local la un URL (PUT implicit)
Creează directoarele locale necesare la salvarea ieșirii
Suprimă indicatorul de progres și mesajele de eroare
Salvează fișierul/fișierele de ieșire în directorul specificat (curl 7.73+)
curl -o: Salvare cu un nume de fișier specific
- Ce face
- Opțiunea
-o(sau--output) indică lui curl să salveze corpul răspunsului într-un fișier pe care îl specifici. Fără ea, curl afișează răspunsul pe stdout (terminalul tău). Poți folosi orice nume de fișier și cale — curl va crea fișierul sau va suprascrie unul existent. - Utilizare comună
- Folosește
-ocând trebuie să controlezi numele exact al fișierului sau să salvezi într-un director specific. Funcționează cu orice protocol — HTTP, HTTPS, FTP, SFTP și altele. Combină cu-Lpentru redirecționări și-spentru operare silențioasă în scripturi.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -O: Salvare cu numele fișierului de pe server
- Ce face
- Opțiunea
-O(sau--remote-name) salvează fișierul descărcat folosind numele extras din URL. De exemplu, dacă URL-ul se termină cu/data.csv, curl creează un fișier numitdata.csvîn directorul curent. - Utilizare comună
- Folosește
-Ocând numele fișierului de pe server este relevant și nu trebuie să îl redenumești. Poți transmite mai multe opțiuni-Opentru a descărca mai multe fișiere într-o singură comandă. Notă: dacă URL-ul nu conține un nume de fișier (de ex., se termină cu/), curl va eșua — folosește-oîn schimb.
$ curl -O https://example.com/files/data.csvcurl -L: Urmărire redirecționări
- Ce face
- Opțiunea
-L(sau--location) face ca curl să urmărească automat redirecționările HTTP — 301 (Moved Permanently), 302 (Found), 307 și 308. Fără-L, curl returnează răspunsul de redirecționare în sine, nu conținutul real. - Utilizare comună
- Majoritatea URL-urilor de descărcare redirecționează cel puțin o dată (de ex., de la HTTP la HTTPS, sau de la un URL scurt la fișierul real). Combină întotdeauna
-Lcu-osau-Ocând descarci fișiere. Implicit, curl urmărește până la 50 de redirecționări; schimbă acest lucru cu--max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -C -: Reluarea descărcărilor întrerupte
- Ce face
- Opțiunea
-C -(sau--continue-at -) indică lui curl să detecteze automat dimensiunea fișierului parțial existent și să reia descărcarea de unde a rămas. Serverul trebuie să suporte antetul HTTPRangepentru ca acest lucru să funcționeze. - Utilizare comună
- Dacă o descărcare mare a fost întreruptă de o problemă de rețea sau timeout, pur și simplu re-execută aceeași comandă cu
-C -adăugat. curl va trimite un antetRange: bytes=OFFSET-și va descărca doar datele rămase. Acest lucru este esențial pentru fișiere mari pe conexiuni instabile.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: Limitarea vitezei de descărcare
- Ce face
- Opțiunea
--limit-ratelimitează viteza de descărcare (și upload) la rata specificată. Acceptă sufixe:ksauKpentru kilobytes/s,msauMpentru megabytes/s,gsauGpentru gigabytes/s. - Utilizare comună
- Folosește
--limit-ratepentru a evita saturarea lățimii de bandă când descarci fișiere mari, mai ales pe conexiuni partajate. Este util și pentru testarea modului în care aplicația ta gestionează răspunsurile lente.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: Anulare dacă fișierul este prea mare
- Ce face
- Opțiunea
--max-filesizeindică lui curl să anuleze transferul dacă dimensiunea așteptată a fișierului (din antetulContent-Length) depășește limita specificată. Dimensiunea poate folosi sufixe precumk,M,G. - Utilizare comună
- Folosește în scripturi pentru a preveni descărcările neașteptat de mari care consumă spațiu pe disc. Reține că nu toate serverele trimit
Content-Length— în acest caz, curl nu poate impune această limită și descărcarea continuă normal.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Folosește numele de fișier sugerat de server
- Ce face
- Opțiunea
-J(sau--remote-header-name) indică lui curl să folosească numele de fișier specificat în antetulContent-Dispositional serverului în loc să îl deriveze din URL. Acest lucru este comun pentru API-urile de descărcare care returnează fișiere cu nume relevante. - Utilizare comună
- Combină întotdeauna
-Jcu-O. Acest lucru este util când URL-ul este un endpoint API (precum/export?format=csv) dar serverul returnează un nume de fișier adecvat în antete. Notă de securitate: serverul controlează numele fișierului, deci folosește doar cu servere de încredere.
$ curl -L -O -J https://example.com/api/export?format=csvcurl -#: Afișarea unei bare de progres
- Ce face
- Opțiunea
-#(sau--progress-bar) înlocuiește indicatorul implicit detaliat de progres cu o bară de progres simplă###. Este mai ușor de citit pentru utilizare interactivă. - Utilizare comună
- Folosește
-#când descarci interactiv și dorești un indicator curat de progres. Pentru scripturi, preferă-s(silențios) sau indicatorul implicit de progres. Ieșirea implicită a curl afișează deja viteza, procentajul, timpul rămas și dimensiunea totală.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzOpțiuni suplimentare de descărcare
Furnizează utilizator:parolă pentru autentificarea pe server
Reîncearcă transferul la erori tranzitorii (număr de încercări)
Așteaptă acest număr de secunde între reîncercări
Încarcă un fișier local la un URL (PUT implicit)
Creează directoarele locale necesare la salvarea ieșirii
Suprimă indicatorul de progres și mesajele de eroare
Salvează fișierul/fișierele de ieșire în directorul specificat (curl 7.73+)
Scenarii reale de descărcare
Aceste exemple combină mai multe opțiuni pentru a gestiona sarcini comune de descărcare pe care le vei întâlni în dezvoltarea și scripturile de zi cu zi.
Descărcarea mai multor fișiere simultan
Folosește mai multe opțiuni -O pentru a descărca mai multe fișiere într-o singură comandă. curl le procesează secvențial. Pentru descărcări paralele, folosește xargs sau GNU parallel.
$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txtDescărcare de pe un server FTP
curl suportă FTP, FTPS și SFTP nativ. Adaugă -u user:password pentru acces autentificat. Folosește -O pentru a păstra numele fișierului de pe server.
$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sqlDescărcare cu autentificare
Folosește -u user:pass pentru Basic Auth, sau -H pentru a transmite un Bearer token sau cheie API. Combină cu -L și -o pentru o descărcare completă.
$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/exportDescărcare fiabilă cu reluare și reîncercare
Combină -C - (reluare), --retry (reîncercare automată la eșec) și -L (urmărire redirecționări) pentru descărcări robuste care supraviețuiesc întreruperilor de rețea.
$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zipÎntrebări frecvente despre descărcarea cu curl
Care este diferența între curl -o și curl -O?
-o filename salvează descărcarea cu numele exact de fișier pe care îl specifici. -O extrage numele fișierului din URL și îl folosește. Folosește -o când dorești un nume sau cale personalizat; folosește -O când numele fișierului de pe server este adecvat.
De ce curl descarcă un fișier gol sau HTML în loc de fișierul real?
URL-ul probabil returnează o redirecționare HTTP (301 sau 302). Implicit, curl salvează răspunsul de redirecționare în sine — nu conținutul final. Adaugă -L pentru a urmări redirecționările automat: curl -L -o file URL.
Cum reiau un fișier parțial descărcat cu curl?
Folosește curl -C - -o filename URL. Opțiunea -C - detectează dimensiunea fișierului existent și trimite un antet Range pentru a solicita doar octeții rămași. Serverul trebuie să suporte cereri de interval pentru ca acest lucru să funcționeze.
Cum limitez viteza de descărcare în curl?
Folosește --limit-rate cu o valoare și sufix: curl --limit-rate 500k -o file URL limitează viteza la 500 KB/s. Sufixe: k (KB/s), M (MB/s), G (GB/s).
Poate curl descărca mai multe fișiere simultan?
Da. Folosește mai multe opțiuni -O: curl -O URL1 -O URL2 -O URL3. curl le descarcă secvențial. Pentru descărcări paralele, transmite o listă de URL-uri către xargs -P 4 -I {} curl -O {}.
Cum descarc un fișier care necesită autentificare?
Pentru HTTP Basic Auth: curl -u user:pass -o file URL. Pentru Bearer tokens: curl -H "Authorization: Bearer TOKEN" -o file URL. Pentru chei API în antete: curl -H "X-API-Key: KEY" -o file URL.
Cum descarc fișiere de pe un server FTP cu curl?
Folosește curl -u user:pass -o localfile ftp://host/path/file. curl suportă FTP, FTPS (FTP peste TLS) și SFTP (SSH FTP) nativ. Pentru FTP anonim, omite -u.
Cum descarc fișiere mari în mod fiabil cu curl?
Combină -C - (reluare la eșec), --retry 5 (reîncercare automată), --retry-delay 10 și -L (urmărire redirecționări): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Acest lucru gestionează automat problemele de rețea.
Cum afișez o bară de progres la descărcarea cu curl?
Folosește curl -# -o file URL pentru o bară de progres simplă. Ieșirea implicită a curl afișează deja viteza de transfer, procentajul și timpul estimat. Pentru scripturi, folosește -s pentru a suprima toată ieșirea.
Pot specifica un director de descărcare în curl?
Cu curl 7.73+, folosește --output-dir /path/to/dir combinat cu -O. Pentru versiuni mai vechi, specifică calea completă cu -o /path/to/dir/filename. Adaugă --create-dirs dacă directorul nu există încă.
Ar trebui să folosesc curl sau wget pentru descărcarea fișierelor?
Ambele sunt excelente. wget este mai simplu pentru oglindirea recursivă a site-urilor și are logică de reîncercare încorporată. curl suportă peste 25 de protocoale (nu doar HTTP/FTP), este mai bun pentru apeluri API și scripturi, suportă mai multe metode de autentificare și este disponibil pe aproape orice sistem de operare.
Cum folosesc curl într-un script bash pentru descărcarea fișierelor?
Folosește curl -fsSL -o file URL: -f eșuează silențios la erori HTTP (fără pagină de eroare salvată), -s silențios, -S afișează erori chiar și în mod silențios, -L urmărește redirecționări. Verifică codul de ieșire: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.