Fájlok letöltése curl-lel

A curl az egyik legsokoldalúbb parancssori eszköz fájlok letöltésére HTTP, HTTPS, FTP és számos más protokollon keresztül. Akár egyetlen API-választ kell fájlba mentenie, akár kötegelt letöltéseket kell automatizálnia shell-szkriptben, a curl-nek van rá kapcsolója. Ez az útmutató minden letöltéssel kapcsolatos opciót bemutat — az alapvető fájlmentéstől a -o és -O kapcsolókkal a megszakított átvitelek folytatásáig a -C - kapcsolóval, a sávszélesség korlátozásáig a --limit-rate kapcsolóval és a folyamatjelzők megjelenítéséig. Minden kapcsolóhoz világos magyarázat, gyakori használati minták és másolásra kész példa tartozik.

Letöltési kapcsolók gyors referenciája

-o

Kimenet írása megadott nevű fájlba a stdout helyett

-O

Kimenet írása a távoli fájl nevével megegyező fájlba

-L

HTTP 3xx átirányítások automatikus követése

-C -

Korábbi fájlátvitel folytatása

--limit-rate

Átviteli sebesség korlátozása a megadott értékre

--max-filesize

A megadott méretnél nagyobb fájlok letöltésének megtagadása

-J

A Content-Disposition fejléc használata a fájl elnevezéséhez

-#

Átviteli folyamat megjelenítése egyszerű folyamatjelzővel

-u

Felhasználónév:jelszó megadása szerverhitelesítéshez

--retry

Átvitel újrapróbálása átmeneti hibáknál (próbálkozások száma)

--retry-delay

Ennyi másodperc várakozás az újrapróbálások között

-T

Helyi fájl feltöltése egy URL-re (alapértelmezetten PUT)

--create-dirs

Helyi könyvtárak létrehozása szükség szerint a kimenet mentésekor

-s

Folyamatjelző és hibaüzenetek elrejtése

--output-dir

Kimeneti fájl(ok) mentése a megadott könyvtárba (curl 7.73+)

curl -o: Mentés megadott fájlnévvel

Mit csinál
A -o (vagy --output) kapcsoló utasítja a curl-t, hogy a válasz törzsét az Ön által megadott fájlba mentse. Enélkül a curl a választ a stdout-ra (a terminálra) írja. Bármilyen fájlnevet és útvonalat használhat — a curl létrehozza a fájlt, vagy felülírja a meglévőt.
Gyakori használat
Használja a -o kapcsolót, amikor pontosan szabályozni szeretné a fájlnevet, vagy egy adott könyvtárba szeretne menteni. Bármilyen protokollal működik — HTTP, HTTPS, FTP, SFTP és egyéb. Kombinálja a -L kapcsolóval az átirányítások kezeléséhez és a -s kapcsolóval a csendes működéshez szkriptekben.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -O: Mentés a távoli fájlnévvel

Mit csinál
A -O (vagy --remote-name) kapcsoló a letöltött fájlt az URL-ből kinyert fájlnévvel menti. Például, ha az URL a /data.csv végződéssel rendelkezik, a curl egy data.csv nevű fájlt hoz létre az aktuális könyvtárban.
Gyakori használat
Használja a -O kapcsolót, amikor a távoli fájlnév megfelelő és nem kell átnevezni. Több -O kapcsolót is megadhat több fájl letöltéséhez egyetlen paranccsal. Megjegyzés: ha az URL nem tartalmaz fájlnevet (pl. / végződésű), a curl hibát jelez — használja helyette a -o kapcsolót.
$ curl -O https://example.com/files/data.csv

curl -L: Átirányítások követése

Mit csinál
A -L (vagy --location) kapcsoló arra utasítja a curl-t, hogy automatikusan kövesse a HTTP átirányításokat — 301 (Permanent Redirect), 302 (Found), 307 és 308. A -L nélkül a curl magát az átirányítási választ adja vissza a tényleges tartalom helyett.
Gyakori használat
A legtöbb letöltési URL legalább egyszer átirányít (pl. HTTP-ről HTTPS-re, vagy rövid URL-ről a tényleges fájlra). Fájlok letöltésekor mindig kombinálja a -L kapcsolót a -o vagy -O kapcsolóval. Alapértelmezetten a curl legfeljebb 50 átirányítást követ; ezt a --max-redirs kapcsolóval módosíthatja.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gz

curl -C -: Megszakított letöltés folytatása

Mit csinál
A -C - (vagy --continue-at -) kapcsoló utasítja a curl-t, hogy automatikusan észlelje a meglévő részleges fájl méretét és folytassa a letöltést onnan, ahol abbamaradt. A szervernek támogatnia kell a HTTP Range fejlécet ehhez.
Gyakori használat
Ha egy nagy letöltést hálózati hiba vagy időtúllépés szakított meg, egyszerűen futtassa újra ugyanazt a parancsot a -C - hozzáadásával. A curl egy Range: bytes=OFFSET- fejlécet küld és csak a fennmaradó adatokat tölti le. Ez elengedhetetlen nagy fájlok letöltéséhez megbízhatatlan kapcsolatokon.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate: Letöltési sebesség korlátozása

Mit csinál
A --limit-rate kapcsoló korlátozza a letöltési (és feltöltési) sebességet a megadott értékre. Utótagokat fogad el: k vagy K kilobájt/s, m vagy M megabájt/s, g vagy G gigabájt/s.
Gyakori használat
Használja a --limit-rate kapcsolót, hogy elkerülje a sávszélesség telítését nagy fájlok letöltésekor, különösen megosztott kapcsolatokon. Hasznos annak tesztelésére is, hogyan kezeli az alkalmazás a lassú válaszokat.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize: Megszakítás túl nagy fájl esetén

Mit csinál
A --max-filesize kapcsoló utasítja a curl-t az átvitel megszakítására, ha a várható fájlméret (a Content-Length fejlécből) meghaladja a megadott limitet. A méret utótagokat használhat, mint k, M, G.
Gyakori használat
Használja szkriptekben a váratlanul nagy letöltések megakadályozására, amelyek lemezterületet foglalnának. Megjegyzés: nem minden szerver küldi a Content-Length fejlécet — ebben az esetben a curl nem tudja érvényesíteni a limitet és a letöltés normálisan folytatódik.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J: Szerver által javasolt fájlnév használata

Mit csinál
A -J (vagy --remote-header-name) kapcsoló utasítja a curl-t, hogy a szerver Content-Disposition fejlécében megadott fájlnevet használja az URL-ből való származtatás helyett. Ez gyakori letöltési API-knál, amelyek értelmes nevű fájlokat adnak vissza.
Gyakori használat
Mindig kombinálja a -J kapcsolót a -O kapcsolóval. Hasznos, amikor az URL egy API-végpont (mint /export?format=csv), de a szerver megfelelő fájlnevet ad vissza a fejlécekben. Biztonsági megjegyzés: a szerver irányítja a fájlnevet, ezért csak megbízható szerverekkel használja.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -#: Folyamatjelző sáv megjelenítése

Mit csinál
A -# (vagy --progress-bar) kapcsoló az alapértelmezett részletes folyamatjelzőt egy egyszerű ### folyamatjelző sávra cseréli. Ez interaktív használathoz könnyebben olvasható.
Gyakori használat
Használja a -# kapcsolót interaktív letöltéskor, ha tiszta folyamatjelzőt szeretne. Szkriptekhez a -s (csendes) módot vagy az alapértelmezett folyamatjelzőt részesítse előnyben. Az alapértelmezett curl kimenet már mutatja a sebességet, százalékot, hátralévő időt és a teljes méretet.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

További letöltési opciók

-u

Felhasználónév:jelszó megadása szerverhitelesítéshez

--retry

Átvitel újrapróbálása átmeneti hibáknál (próbálkozások száma)

--retry-delay

Ennyi másodperc várakozás az újrapróbálások között

-T

Helyi fájl feltöltése egy URL-re (alapértelmezetten PUT)

--create-dirs

Helyi könyvtárak létrehozása szükség szerint a kimenet mentésekor

-s

Folyamatjelző és hibaüzenetek elrejtése

--output-dir

Kimeneti fájl(ok) mentése a megadott könyvtárba (curl 7.73+)

Valós letöltési forgatókönyvek

Ezek a példák több kapcsolót kombinálnak a mindennapi fejlesztés és szkriptelés során előforduló gyakori letöltési feladatok kezeléséhez.

Több fájl letöltése egyszerre

Használjon több -O kapcsolót több fájl letöltéséhez egyetlen paranccsal. A curl egymás után dolgozza fel őket. Párhuzamos letöltésekhez használja az xargs vagy a GNU parallel eszközt.

$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txt

Letöltés FTP szerverről

A curl natívan támogatja az FTP, FTPS és SFTP protokollokat. Adja hozzá a -u user:password kapcsolót hitelesített hozzáféréshez. Használja a -O kapcsolót a távoli fájlnév megtartásához.

$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sql

Letöltés hitelesítéssel

Használja a -u user:pass kapcsolót Basic Auth-hoz, vagy a -H kapcsolót Bearer token vagy API-kulcs átadásához. Kombinálja a -L és -o kapcsolókkal a teljes letöltéshez.

$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/export

Megbízható letöltés folytatással és újrapróbálással

Kombinálja a -C - (folytatás), --retry (automatikus újrapróbálás hiba esetén) és -L (átirányítások követése) kapcsolókat a hálózati megszakításokat túlélő robusztus letöltésekhez.

$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zip

Gyakran Ismételt Kérdések a curl letöltésről

Mi a különbség a curl -o és a curl -O között?

A -o filename a letöltést az Ön által megadott fájlnévvel menti. A -O a fájlnevet az URL-ből nyeri ki és azt használja. Használja a -o kapcsolót, ha egyéni nevet vagy útvonalat szeretne; használja a -O kapcsolót, ha a távoli fájlnév megfelelő.

Miért tölt le a curl üres vagy HTML fájlt a tényleges fájl helyett?

Az URL valószínűleg HTTP átirányítást ad vissza (301 vagy 302). Alapértelmezetten a curl magát az átirányítási választ menti — nem a végső tartalmat. Adja hozzá a -L kapcsolót az átirányítások automatikus követéséhez: curl -L -o file URL.

Hogyan folytathatok egy részlegesen letöltött fájlt curl-lel?

Használja a curl -C - -o filename URL parancsot. A -C - kapcsoló észleli a meglévő fájlméretet és egy Range fejlécet küld, hogy csak a fennmaradó bájtokat kérje. A szervernek támogatnia kell a tartomány-kéréseket ehhez.

Hogyan korlátozhatom a letöltési sebességet a curl-ben?

Használja a --limit-rate kapcsolót értékkel és utótaggal: curl --limit-rate 500k -o file URL 500 KB/s-ra korlátozza a sebességet. Utótagok: k (KB/s), M (MB/s), G (GB/s).

Tud a curl egyszerre több fájlt letölteni?

Igen. Használjon több -O kapcsolót: curl -O URL1 -O URL2 -O URL3. A curl egymás után tölti le őket. Párhuzamos letöltésekhez irányítsa az URL-listát az xargs -P 4 -I {} curl -O {} parancsba.

Hogyan tölthetek le hitelesítést igénylő fájlt?

HTTP Basic Auth-hoz: curl -u user:pass -o file URL. Bearer tokenhez: curl -H "Authorization: Bearer TOKEN" -o file URL. API-kulcshoz fejlécben: curl -H "X-API-Key: KEY" -o file URL.

Hogyan tölthetek le fájlokat FTP szerverről curl-lel?

Használja a curl -u user:pass -o localfile ftp://host/path/file parancsot. A curl natívan támogatja az FTP, FTPS (FTP over TLS) és SFTP (SSH FTP) protokollokat. Névtelen FTP-hez hagyja el a -u kapcsolót.

Hogyan tölthetek le nagy fájlokat megbízhatóan curl-lel?

Kombinálja a -C - (folytatás hiba esetén), --retry 5 (automatikus újrapróbálás), --retry-delay 10 és -L (átirányítások követése) kapcsolókat: curl -C - --retry 5 --retry-delay 10 -L -o file URL. Ez automatikusan kezeli a hálózati problémákat.

Hogyan jeleníthetek meg folyamatjelzőt curl letöltéskor?

Használja a curl -# -o file URL parancsot egy egyszerű folyamatjelző sávhoz. Az alapértelmezett curl kimenet már mutatja az átviteli sebességet, százalékot és a becsült időt. Szkriptekhez használja a -s kapcsolót az összes kimenet elrejtéséhez.

Megadhatok letöltési könyvtárat a curl-ben?

A curl 7.73+ verziótól használja az --output-dir /path/to/dir kapcsolót a -O kapcsolóval kombinálva. Régebbi verziókhoz adja meg a teljes útvonalat a -o /path/to/dir/filename kapcsolóval. Adja hozzá a --create-dirs kapcsolót, ha a könyvtár még nem létezik.

A curl-t vagy a wget-et használjam fájlok letöltéséhez?

Mindkettő kiváló. A wget egyszerűbb rekurzív weboldal-tükrözéshez és beépített újrapróbálási logikával rendelkezik. A curl 25+ protokollt támogat (nem csak HTTP/FTP-t), jobb API-hívásokhoz és szkripteléshez, több hitelesítési módszert támogat, és gyakorlatilag minden operációs rendszeren elérhető.

Hogyan használjam a curl-t bash szkriptben fájlok letöltéséhez?

Használja a curl -fsSL -o file URL parancsot: -f csendben hibázik HTTP hibáknál (nem menti a hibaoldalt), -s csendes mód, -S hibák megjelenítése csendes módban is, -L átirányítások követése. Ellenőrizze a kilépési kódot: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.