Slik bruker du curl for å laste ned filer fra Linux-kommandolinjen

Linux curl-kommandoen kan gjøre mye mer enn å laste ned filer. Finn ut hva curl er i stand til, og når du bør bruke den i stedet for wget.

curl vs. wget : Hva er forskjellen?

Folk sliter ofte med å identifisere de relative styrkene til wget- og curl-kommandoene. Kommandoene har en viss funksjonell overlapping. De kan hver enkelt hente filer fra eksterne steder, men det er der likheten slutter.

wget er en fantastisk verktøy for å laste ned innhold og filer. Den kan laste ned filer, nettsider og kataloger. Den inneholder intelligente rutiner for å krysse lenker på nettsider og rekursivt laste ned innhold på tvers av et helt nettsted. Det er uovertruffen som en kommandolinje nedlastingsbehandler.

krøll tilfredsstiller et helt annet behov. Ja, den kan hente filer, men den kan ikke rekursivt navigere på et nettsted på jakt etter innhold å hente. Det curl faktisk gjør er å la deg samhandle med eksterne systemer ved å sende forespørsler til disse systemene, og hente og vise svarene deres til deg. Disse svarene kan godt være nettsideinnhold og filer, men de kan også inneholde data levert via en nettjeneste eller API som et resultat av «spørsmålet» som ble stilt av curl-forespørselen.

Og curl er ikke begrenset til nettsteder. curl støtter over 20 protokoller, inkludert HTTP, HTTPS, SCP, SFTP og FTP. Og uten tvil, på grunn av sin overlegne håndtering av Linux-rør, kan curl lettere integreres med andre kommandoer og skript.

Forfatteren av curl har en nettside som beskriver forskjellene han ser mellom curl og wget.

Installerer krøll

Av datamaskinene som ble brukt til å undersøke denne artikkelen, hadde Fedora 31 og Manjaro 18.1.0 allerede curl installert. curl måtte installeres på Ubuntu 18.04 LTS. På Ubuntu, kjør denne kommandoen for å installere den:

sudo apt-get install curl

Curl-versjonen

Alternativet –versjon gjør curlreport til sin versjon. Den viser også alle protokollene den støtter.

curl --version

Hente en webside

Hvis vi peker curl på en nettside, vil den hente den for oss.

curl https://www.bbc.com

Men standardhandlingen er å dumpe den til terminalvinduet som kildekode.

  Slik sletter du filer og kataloger i Linux-terminalen

Pass på: Hvis du ikke forteller curl at du vil ha noe lagret som en fil, vil den alltid dumpe det til terminalvinduet. Hvis filen den henter er en binær fil, kan utfallet være uforutsigbart. Skallet kan prøve å tolke noen av byteverdiene i den binære filen som kontrolltegn eller escape-sekvenser.

Lagre data til en fil

La oss fortelle curl å omdirigere utdataene til en fil:

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

krølle https://www.bbc.com > bbc.html i et terminalvindu” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Denne gangen ser vi ikke den hentede informasjonen, den sendes rett til filen for oss.  Fordi det ikke er noe terminalvindu å vise, gir curl ut et sett med fremdriftsinformasjon.</p>
<p>Det gjorde ikke dette i det forrige eksemplet fordi fremdriftsinformasjonen ville vært spredt over nettsidens kildekode, så curl undertrykte det automatisk.</p>
<p>I dette eksemplet oppdager curl at utdata blir omdirigert til en fil og at det er trygt å generere fremdriftsinformasjon.</p>
<p><img loading=

Informasjonen som gis er:

% Total: Totalbeløpet som skal hentes.
% Mottatt: Prosentandelen og faktiske verdier av dataene som er hentet så langt.
% Xferd: Prosent og faktisk sendt, hvis data lastes opp.
Gjennomsnittlig nedlastingshastighet: Gjennomsnittlig nedlastingshastighet.
Gjennomsnittlig opplastingshastighet: Gjennomsnittlig opplastingshastighet.
Time Total: Den estimerte totale varigheten av overføringen.
Tid brukt: Tiden som har gått så langt for denne overføringen.
Tid igjen: Den beregnede tiden som gjenstår for overføringen å fullføre
Current Speed: Gjeldende overføringshastighet for denne overføringen.

Fordi vi omdirigerte utdataene fra curl til en fil, har vi nå en fil kalt «bbc.html.»

Ved å dobbeltklikke på filen åpnes standardnettleseren din slik at den viser den hentede nettsiden.

Merk at adressen i nettleserens adresselinje er en lokal fil på denne datamaskinen, ikke et eksternt nettsted.

Vi trenger ikke å omdirigere utdataene for å lage en fil. Vi kan lage en fil ved å bruke alternativet -o (utdata), og be curl lage filen. Her bruker vi alternativet -o og oppgir navnet på filen vi ønsker å lage «bbc.html.»

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

Bruke en fremdriftslinje for å overvåke nedlastinger

For å få den tekstbaserte nedlastingsinformasjonen erstattet av en enkel fremdriftslinje, bruk -# (fremdriftslinje).

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

Starter en avbrutt nedlasting på nytt

Det er enkelt å starte en nedlasting som har blitt avsluttet eller avbrutt på nytt. La oss starte en nedlasting av en stor fil. Vi bruker den nyeste versjonen av langsiktig støtte av Ubuntu 18.04. Vi bruker –output-alternativet for å spesifisere navnet på filen vi ønsker å lagre den i: «ubuntu180403.iso.»

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

Nedlastingen starter og jobber seg mot fullføring.

  Hvordan forberede en 3D-modell for utskrift på Linux med Cura

Hvis vi tvangsavbryter nedlastingen med Ctrl+C, går vi tilbake til ledeteksten, og nedlastingen avbrytes.

For å starte nedlastingen på nytt, bruk alternativet -C (fortsett på). Dette får curl til å starte nedlastingen på nytt på et spesifisert punkt eller forskyvning i målfilen. Hvis du bruker en bindestrek – som forskyvning, vil curl se på den allerede nedlastede delen av filen og bestemme riktig forskyvning som skal brukes for seg selv.

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

Nedlastingen startes på nytt. curl rapporterer forskyvningen der den starter på nytt.

Henter HTTP-hoder

Med alternativet -I (hode) kan du bare hente HTTP-hodene. Dette er det samme som å sende HTTP HEAD kommando til en webserver.

curl -I www.twitter.com

Denne kommandoen henter kun informasjon; den laster ikke ned noen nettsider eller filer.

Laste ned flere URL-er

Ved å bruke xargs kan vi laste ned flere URL-er samtidig. Kanskje vi ønsker å laste ned en serie nettsider som utgjør en enkelt artikkel eller veiledning.

Kopier disse nettadressene til et redigeringsprogram og lagre dem i en fil kalt «urls-to-download.txt.» Vi kan bruke xargs til behandle innholdet i hver linje av tekstfilen som en parameter som den vil mate for å krølle, i sin tur.

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

Dette er kommandoen vi må bruke for å la xargs sende disse nettadressene til å krølle én om gangen:

xargs -n 1 curl -O 

Note that this command uses the -O (remote file) output command, which uses an uppercase “O.” This option causes curl to save the retrieved  file with the same name that the file has on the remote server.

The -n 1 option tells xargs to treat each line of the text file as a single parameter.

When you run the command, you’ll see multiple downloads start and finish, one after the other.

Checking in the file browser shows the multiple files have been downloaded. Each one bears the name it had on the remote server.

Downloading Files From an FTP Server

Using curl with a File Transfer Protocol (FTP) server is easy, even if you have to authenticate with a username and password. To pass a username and password with curl use the -u (user) option, and type the username, a colon “:”, and the password. Don’t put a space before or after the colon.

This is a free-for-testing FTP server hosted by Rebex. The test FTP site has a pre-set username of “demo”, and the password is “password.” Don’t use this type of weak username and password on a production or “real” FTP server.

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

curl finner ut at vi peker den mot en FTP-server, og returnerer en liste over filene som finnes på serveren.

Den eneste filen på denne serveren er en "readme.txt"-fil med en lengde på 403 byte. La oss hente den. Bruk samme kommando som for et øyeblikk siden, med filnavnet vedlagt:

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

Filen hentes og curl viser innholdet i terminalvinduet.

I nesten alle tilfeller vil det være mer praktisk å ha den hentede filen lagret på disk for oss, i stedet for å vises i terminalvinduet. Nok en gang kan vi bruke -O (ekstern fil) utdatakommando for å få filen lagret på disk, med samme filnavn som den har på den eksterne serveren.

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

Filen hentes og lagres på disk. Vi kan bruke ls til å sjekke fildetaljene. Den har samme navn som filen på FTP-serveren, og den har samme lengde, 403 byte.

ls -hl readme.txt

Sende parametere til eksterne servere

Noen eksterne servere vil godta parametere i forespørsler som sendes til dem. Parametrene kan brukes til å formatere de returnerte dataene, for eksempel, eller de kan brukes til å velge de nøyaktige dataene som brukeren ønsker å hente. Det er ofte mulig å samhandle med web applikasjonsprogrammeringsgrensesnitt (API) ved å bruke krøll.

Som et enkelt eksempel ipify nettstedet har en API kan spørres for å finne din eksterne IP-adresse.

curl https://api.ipify.org

Ved å legge til formatparameteren til kommandoen, med verdien av "json" kan vi igjen be om vår eksterne IP-adresse, men denne gangen vil de returnerte dataene bli kodet i JSON-format.

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

Her er et annet eksempel som bruker en Google API. Den returnerer et JSON-objekt som beskriver en bok. Parameteren du må oppgi er International Standard Book Number (ISBN)-nummeret til en bok. Du finner disse på baksiden av de fleste bøker, vanligvis under en strekkode. Parameteren vi skal bruke her er "0131103628."

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

De returnerte dataene er omfattende:

Noen ganger krøll, noen ganger wget

Hvis jeg ønsket å laste ned innhold fra et nettsted og få trestrukturen til nettstedet søkt rekursivt etter det innholdet, ville jeg brukt wget.

Hvis jeg ønsket å samhandle med en ekstern server eller API, og muligens laste ned noen filer eller nettsider, ville jeg brukt curl. Spesielt hvis protokollen var en av de mange som ikke støttes av wget.