Tiedostojen lataaminen curlilla

curl on yksi monipuolisimmista komentorivityökaluista tiedostojen lataamiseen HTTP-, HTTPS-, FTP- ja kymmenien muiden protokollien kautta. Tarvitsetpa sitten tallentaa yksittäisen API-vastauksen tiedostoon tai automatisoida erälatauksia shell-skriptissä, curlilla on lippu sitä varten. Tämä opas kattaa kaikki lataukseen liittyvät vaihtoehdot — perustiedostojen tallennuksesta -o- ja -O-lipuilla keskeytettyjen siirtojen jatkamiseen -C --lipulla, kaistanleveyden rajoittamiseen --limit-rate-lipulla ja edistymispalkkien näyttämiseen. Jokainen lippu sisältää selkeän selityksen, yleiset käyttötavat ja kopiovalmiin esimerkin.

Latauslippujen pikaopas

-o

Kirjoita tuloste nimettyyn tiedostoon stdout:n sijaan

-O

Kirjoita tuloste etätiedoston mukaisella nimellä

-L

Seuraa HTTP 3xx -uudelleenohjauksia automaattisesti

-C -

Jatka/aloita uudelleen aiempi tiedostonsiirto

--limit-rate

Rajoita siirtonopeus annettuun arvoon

--max-filesize

Kieltäydy lataamasta tiedostoja, jotka ylittävät määritetyn koon

-J

Käytä Content-Disposition-otsikkoa tiedoston nimeämiseen

-#

Näytä siirron edistyminen yksinkertaisena edistymispalkkina

-u

Anna käyttäjänimi:salasana palvelimen todennusta varten

--retry

Yritä siirtoa uudelleen ohimenevien virheiden yhteydessä (kertojen määrä)

--retry-delay

Odota näin monta sekuntia uudelleenyritysten välillä

-T

Lähetä paikallinen tiedosto URL:iin (oletuksena PUT)

--create-dirs

Luo paikalliset hakemistot tarvittaessa tallennettaessa tulostetta

-s

Piilota edistymismittari ja virheilmoitukset

--output-dir

Tallenna tulostetiedosto(t) määritettyyn hakemistoon (curl 7.73+)

curl -o: Tallenna tietyllä tiedostonimellä

Mitä se tekee
-o-lippu (tai --output) käskee curlia tallentamaan vastauksen rungon määrittämääsi tiedostoon. Ilman sitä curl tulostaa vastauksen stdout:iin (päätteeseesi). Voit käyttää mitä tahansa tiedostonimeä ja polkua — curl luo tiedoston tai korvaa olemassa olevan.
Yleinen käyttö
Käytä -o-lippua, kun haluat hallita tarkkaa tiedostonimeä tai tallentaa tiettyyn hakemistoon. Se toimii minkä tahansa protokollan kanssa — HTTP, HTTPS, FTP, SFTP ja muut. Yhdistä -L-lippuun uudelleenohjausten käsittelyyn ja -s-lippuun hiljaiseen toimintaan skripteissä.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -O: Tallenna etätiedostonimellä

Mitä se tekee
-O-lippu (tai --remote-name) tallentaa ladatun tiedoston URL:sta poimitulla tiedostonimellä. Jos URL päättyy esimerkiksi /data.csv, curl luo tiedoston nimeltä data.csv nykyiseen hakemistoon.
Yleinen käyttö
Käytä -O-lippua, kun etätiedostonimi on merkityksellinen eikä sinun tarvitse nimetä sitä uudelleen. Voit antaa useita -O-lippuja ladataksesi useita tiedostoja yhdellä komennolla. Huomaa: jos URL ei sisällä tiedostonimeä (esim. päättyy /-merkkiin), curl epäonnistuu — käytä sen sijaan -o-lippua.
$ curl -O https://example.com/files/data.csv

curl -L: Seuraa uudelleenohjauksia

Mitä se tekee
-L-lippu (tai --location) saa curlin automaattisesti seuraamaan HTTP-uudelleenohjauksia — 301 (Moved Permanently), 302 (Found), 307 ja 308. Ilman -L-lippua curl palauttaa itse uudelleenohjauvastauksen todellisen sisällön sijaan.
Yleinen käyttö
Useimmat lataus-URL:t uudelleenohjaavat vähintään kerran (esim. HTTP:stä HTTPS:ään tai lyhyestä URL:sta todelliseen tiedostoon). Yhdistä aina -L -o- tai -O-lippuun tiedostoja ladattaessa. Oletuksena curl seuraa enintään 50 uudelleenohjausta; muuta tätä --max-redirs-lipulla.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gz

curl -C -: Jatka keskeytyneitä latauksia

Mitä se tekee
-C --lippu (tai --continue-at -) käskee curlia automaattisesti tunnistamaan olemassa olevan osittaisen tiedoston koon ja jatkamaan latausta siitä kohdasta, johon se jäi. Palvelimen tulee tukea HTTP Range -otsikkoa.
Yleinen käyttö
Jos suuri lataus keskeytyi verkko-ongelman tai aikakatkaisun vuoksi, suorita sama komento uudelleen lisäämällä -C -. curl lähettää Range: bytes=OFFSET- -otsikon ja lataa vain jäljellä olevan datan. Tämä on välttämätöntä suurille tiedostoille epävakailla yhteyksillä.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate: Rajoita latausnopeutta

Mitä se tekee
--limit-rate-lippu rajoittaa lataus- (ja lähetys-) nopeuden määritettyyn arvoon. Se hyväksyy päätteet: k tai K kilotavuiksi/s, m tai M megatavuiksi/s, g tai G gigatavuiksi/s.
Yleinen käyttö
Käytä --limit-rate-lippua välttääksesi kaistanleveyden ylikuormittamisen ladattaessa suuria tiedostoja, erityisesti jaetuilla yhteyksillä. Se on hyödyllinen myös testattaessa, miten sovelluksesi käsittelee hitaita vastauksia.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize: Keskeytä jos tiedosto on liian suuri

Mitä se tekee
--max-filesize-lippu käskee curlia keskeyttämään siirron, jos odotettu tiedostokoko (Content-Length-otsikon perusteella) ylittää määritetyn rajan. Koko voi käyttää päätteitä kuten k, M, G.
Yleinen käyttö
Käytä skripteissä estääksesi odottamattoman suurten latausten kuluttamasta levytilaa. Huomaa, että kaikki palvelimet eivät lähetä Content-Length-otsikkoa — siinä tapauksessa curl ei voi valvoa tätä rajaa ja lataus jatkuu normaalisti.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J: Käytä palvelimen ehdottamaa tiedostonimeä

Mitä se tekee
-J-lippu (tai --remote-header-name) käskee curlia käyttämään palvelimen Content-Disposition-otsikossa määritettyä tiedostonimeä sen sijaan, että se johdettaisiin URL:sta. Tämä on yleistä lataus-API:ille, jotka palauttavat tiedostoja merkityksellisillä nimillä.
Yleinen käyttö
Yhdistä aina -J -O-lippuun. Tämä on hyödyllistä, kun URL on API-päätepiste (kuten /export?format=csv), mutta palvelin palauttaa oikean tiedostonimen otsikoissa. Turvallisuushuomautus: palvelin hallitsee tiedostonimeä, joten käytä vain luotettujen palvelimien kanssa.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -#: Näytä edistymispalkki

Mitä se tekee
-#-lippu (tai --progress-bar) korvaa oletusarvoisen yksityiskohtaisen edistymismittarin yksinkertaisella ###-edistymispalkilla. Tämä on helpommin luettava interaktiivisessa käytössä.
Yleinen käyttö
Käytä -#-lippua ladattaessa interaktiivisesti ja halutessasi siistin edistymisindikaattorin. Skripteissä suosi -s (hiljainen) tai oletusedistymismittaria. Curlin oletustuloste näyttää jo nopeuden, prosentin, jäljellä olevan ajan ja kokonaiskoon.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

Lisälatausvaihtoehdot

-u

Anna käyttäjänimi:salasana palvelimen todennusta varten

--retry

Yritä siirtoa uudelleen ohimenevien virheiden yhteydessä (kertojen määrä)

--retry-delay

Odota näin monta sekuntia uudelleenyritysten välillä

-T

Lähetä paikallinen tiedosto URL:iin (oletuksena PUT)

--create-dirs

Luo paikalliset hakemistot tarvittaessa tallennettaessa tulostetta

-s

Piilota edistymismittari ja virheilmoitukset

--output-dir

Tallenna tulostetiedosto(t) määritettyyn hakemistoon (curl 7.73+)

Käytännön latausskenaariot

Nämä esimerkit yhdistävät useita lippuja yleisten lataustehtävien käsittelyyn, joita kohtaat päivittäisessä kehityksessä ja skriptauksessa.

Lataa useita tiedostoja kerralla

Käytä useita -O-lippuja ladataksesi useita tiedostoja yhdellä komennolla. curl käsittelee ne peräkkäin. Rinnakkaisiin latauksiin käytä xargs- tai GNU parallel -komentoa.

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

Lataa FTP-palvelimelta

curl tukee FTP:tä, FTPS:ää ja SFTP:tä natiivisti. Lisää -u user:password todennettuun pääsyyn. Käytä -O-lippua säilyttääksesi etätiedostonimen.

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

Lataa todennuksella

Käytä -u user:pass Basic Auth -todennukseen tai -H Bearer-tunnisteen tai API-avaimen välittämiseen. Yhdistä -L- ja -o-lippuihin täydellistä latausta varten.

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

Luotettava lataus jatkamisella ja uudelleenyrityksellä

Yhdistä -C - (jatka), --retry (automaattinen uudelleenyritys epäonnistumisen yhteydessä) ja -L (seuraa uudelleenohjauksia) luotettaviin latauksiin, jotka selviävät verkkokatkoista.

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

Usein kysytyt kysymykset curlin lataamisesta

Mikä on ero curl -o:n ja curl -O:n välillä?

-o filename tallentaa latauksen määrittämälläsi tarkkalla tiedostonimellä. -O poimii tiedostonimen URL:sta ja käyttää sitä. Käytä -o-lippua, kun haluat mukautetun nimen tai polun; käytä -O-lippua, kun etätiedostonimi on sopiva sellaisenaan.

Miksi curl lataa tyhjän tai HTML-tiedoston todellisen tiedoston sijaan?

URL palauttaa todennäköisesti HTTP-uudelleenohjauksen (301 tai 302). Oletuksena curl tallentaa itse uudelleenohjauvastauksen — ei lopullista sisältöä. Lisää -L seurataksesi uudelleenohjauksia automaattisesti: curl -L -o file URL.

Miten jatkan osittain ladattua tiedostoa curlilla?

Käytä curl -C - -o filename URL. -C --lippu tunnistaa olemassa olevan tiedostokoon ja lähettää Range-otsikon pyytääkseen vain jäljellä olevat tavut. Palvelimen tulee tukea range-pyyntöjä.

Miten rajoitan latausnopeutta curlissa?

Käytä --limit-rate-lippua arvon ja päätteen kanssa: curl --limit-rate 500k -o file URL rajoittaa nopeuden 500 KB/s. Päätteet: k (KB/s), M (MB/s), G (GB/s).

Voiko curl ladata useita tiedostoja kerralla?

Kyllä. Käytä useita -O-lippuja: curl -O URL1 -O URL2 -O URL3. curl lataa ne peräkkäin. Rinnakkaisiin latauksiin ohjaa URL-lista xargs -P 4 -I {} curl -O {} -komentoon.

Miten lataan tiedoston, joka vaatii todennuksen?

HTTP Basic Auth: curl -u user:pass -o file URL. Bearer-tunnisteet: curl -H "Authorization: Bearer TOKEN" -o file URL. API-avaimet otsikoissa: curl -H "X-API-Key: KEY" -o file URL.

Miten lataan tiedostoja FTP-palvelimelta curlilla?

Käytä curl -u user:pass -o localfile ftp://host/path/file. curl tukee FTP:tä, FTPS:ää (FTP over TLS) ja SFTP:tä (SSH FTP) natiivisti. Nimettömään FTP-yhteyteen jätä -u pois.

Miten lataan suuria tiedostoja luotettavasti curlilla?

Yhdistä -C - (jatka epäonnistumisen yhteydessä), --retry 5 (automaattinen uudelleenyritys), --retry-delay 10 ja -L (seuraa uudelleenohjauksia): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Tämä käsittelee verkko-ongelmat automaattisesti.

Miten näytän edistymispalkin curlilla ladattaessa?

Käytä curl -# -o file URL yksinkertaiseen edistymispalkkiin. Curlin oletustuloste näyttää jo siirtonopeuden, prosentin ja arvioidun ajan. Skripteissä käytä -s piilottaaksesi kaiken tulosteen.

Voinko määrittää lataushakemiston curlissa?

Curl 7.73+ -versiolla käytä --output-dir /path/to/dir yhdistettynä -O-lippuun. Vanhemmilla versioilla määritä koko polku -o /path/to/dir/filename -lipulla. Lisää --create-dirs, jos hakemistoa ei vielä ole.

Pitäisikö minun käyttää curlia vai wgetiä tiedostojen lataamiseen?

Molemmat ovat erinomaisia. wget on yksinkertaisempi rekursiiviseen sivuston peilaukseen ja sillä on sisäänrakennettu uudelleenyrityslogiikka. curl tukee yli 25 protokollaa (ei vain HTTP/FTP), on parempi API-kutsuihin ja skriptaukseen, tukee useampia todennusmenetelmiä ja on saatavilla käytännössä jokaisessa käyttöjärjestelmässä.

Miten käytän curlia bash-skriptissä tiedostojen lataamiseen?

Käytä curl -fsSL -o file URL: -f epäonnistuu hiljaisesti HTTP-virheissä (virhesivua ei tallenneta), -s hiljainen, -S näytä virheet myös hiljaisessa tilassa, -L seuraa uudelleenohjauksia. Tarkista paluukoodi: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.