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
Kimenet írása megadott nevű fájlba a stdout helyett
Kimenet írása a távoli fájl nevével megegyező fájlba
HTTP 3xx átirányítások automatikus követése
Korábbi fájlátvitel folytatása
Átviteli sebesség korlátozása a megadott értékre
A megadott méretnél nagyobb fájlok letöltésének megtagadása
A Content-Disposition fejléc használata a fájl elnevezéséhez
Átviteli folyamat megjelenítése egyszerű folyamatjelzővel
Felhasználónév:jelszó megadása szerverhitelesítéshez
Átvitel újrapróbálása átmeneti hibáknál (próbálkozások száma)
Ennyi másodperc várakozás az újrapróbálások között
Helyi fájl feltöltése egy URL-re (alapértelmezetten PUT)
Helyi könyvtárak létrehozása szükség szerint a kimenet mentésekor
Folyamatjelző és hibaüzenetek elrejtése
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
-okapcsoló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-Lkapcsolóval az átirányítások kezeléséhez és a-skapcsolóval a csendes működéshez szkriptekben.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -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.csvvégződéssel rendelkezik, a curl egydata.csvnevű fájlt hoz létre az aktuális könyvtárban. - Gyakori használat
- Használja a
-Okapcsolót, amikor a távoli fájlnév megfelelő és nem kell átnevezni. Több-Okapcsoló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-okapcsolót.
$ curl -O https://example.com/files/data.csvcurl -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-Lné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
-Lkapcsolót a-ovagy-Okapcsolóval. Alapértelmezetten a curl legfeljebb 50 átirányítást követ; ezt a--max-redirskapcsolóval módosíthatja.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -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 HTTPRangefejlé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 egyRange: 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.zipcurl --limit-rate: Letöltési sebesség korlátozása
- Mit csinál
- A
--limit-ratekapcsoló korlátozza a letöltési (és feltöltési) sebességet a megadott értékre. Utótagokat fogad el:kvagyKkilobájt/s,mvagyMmegabájt/s,gvagyGgigabájt/s. - Gyakori használat
- Használja a
--limit-ratekapcsoló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.isocurl --max-filesize: Megszakítás túl nagy fájl esetén
- Mit csinál
- A
--max-filesizekapcsoló utasítja a curl-t az átvitel megszakítására, ha a várható fájlméret (aContent-Lengthfejlécből) meghaladja a megadott limitet. A méret utótagokat használhat, mintk,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-Lengthfejlé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.bincurl -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 szerverContent-Dispositionfejlé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
-Jkapcsolót a-Okapcsoló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=csvcurl -#: 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.gzTovábbi letöltési opciók
Felhasználónév:jelszó megadása szerverhitelesítéshez
Átvitel újrapróbálása átmeneti hibáknál (próbálkozások száma)
Ennyi másodperc várakozás az újrapróbálások között
Helyi fájl feltöltése egy URL-re (alapértelmezetten PUT)
Helyi könyvtárak létrehozása szükség szerint a kimenet mentésekor
Folyamatjelző és hibaüzenetek elrejtése
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.txtLetö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.sqlLetö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/exportMegbí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.zipGyakran 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.