Hur man använder curl för att ladda ner filer från Linux-kommandoraden

Linux curl-kommandot kan göra mycket mer än att ladda ner filer. Ta reda på vad curl är kapabel till och när du ska använda den istället för wget.

curl vs. wget : Vad är skillnaden?

Människor kämpar ofta för att identifiera de relativa styrkorna hos kommandona wget och curl. Kommandona har viss funktionell överlappning. De kan var och en hämta filer från avlägsna platser, men det är där likheten slutar.

wget är en fantastiskt verktyg för att ladda ner innehåll och filer. Det kan ladda ner filer, webbsidor och kataloger. Den innehåller intelligenta rutiner för att gå igenom länkar på webbsidor och rekursivt ladda ner innehåll över en hel webbplats. Den är oöverträffad som en kommandoradsnedladdningshanterare.

curl tillfredsställer ett helt annat behov. Ja, den kan hämta filer, men den kan inte rekursivt navigera på en webbplats som letar efter innehåll att hämta. Vad curl faktiskt gör är att låta dig interagera med fjärrsystem genom att göra förfrågningar till dessa system och hämta och visa deras svar för dig. Dessa svar kan mycket väl vara webbsidainnehåll och filer, men de kan också innehålla data som tillhandahålls via en webbtjänst eller API som ett resultat av ”frågan” som ställs av curl-begäran.

Och curl är inte begränsad till webbplatser. curl stöder över 20 protokoll, inklusive HTTP, HTTPS, SCP, SFTP och FTP. Och utan tvekan, på grund av dess överlägsna hantering av Linux-pipes, kan curl lättare integreras med andra kommandon och skript.

Författaren till curl har en webbsida som beskriver de skillnader han ser mellan curl och wget.

Installerar curl

Av de datorer som användes för att undersöka den här artikeln hade Fedora 31 och Manjaro 18.1.0 redan curl installerat. curl var tvungen att installeras på Ubuntu 18.04 LTS. På Ubuntu, kör det här kommandot för att installera det:

sudo apt-get install curl

Curl-versionen

Alternativet –version gör curlreport till sin version. Den listar också alla protokoll som den stöder.

curl --version

Hämta en webbsida

Om vi ​​pekar curl på en webbsida kommer den att hämta den åt oss.

curl https://www.bbc.com

Men dess standardåtgärd är att dumpa den till terminalfönstret som källkod.

Se upp: Om du inte säger till curl att du vill ha något lagrat som en fil, kommer det alltid att dumpa det till terminalfönstret. Om filen den hämtar är en binär fil kan resultatet bli oförutsägbart. Skalet kan försöka tolka några av bytevärdena i den binära filen som kontrolltecken eller escape-sekvenser.

Spara data till en fil

Låt oss säga till curl att omdirigera utdata till en fil:

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

curl https://www.bbc.com > bbc.html i ett terminalfönster” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Den här gången ser vi inte den hämtade informationen, den skickas direkt till filen åt oss.  Eftersom det inte finns något terminalfönster att visa, matar curl ut en uppsättning förloppsinformation.</p>
<p>Det gjordes inte detta i föregående exempel eftersom förloppsinformationen skulle ha varit utspridda i webbsidans källkod, så curl undertryckte det automatiskt.</p>
<p>I det här exemplet upptäcker curl att utdata omdirigeras till en fil och att det är säkert att generera förloppsinformation.</p>
<p><img loading=

Informationen som tillhandahålls är:

% Totalt: Det totala beloppet som ska hämtas.
% Mottaget: Procentandelen och faktiska värden för data som hämtats hittills.
% Xferd: Procentandelen och faktiskt skickad, om data laddas upp.
Genomsnittlig nedladdningshastighet: Den genomsnittliga nedladdningshastigheten.
Genomsnittlig uppladdningshastighet: Den genomsnittliga uppladdningshastigheten.
Total tid: Den beräknade totala varaktigheten av överföringen.
Tidsåtgång: Den tid som förflutit hittills för denna överföring.
Tid kvar: Den beräknade tiden som återstår för överföringen att slutföras
Current Speed: Aktuell överföringshastighet för denna överföring.

Eftersom vi omdirigerade utdata från curl till en fil, har vi nu en fil som heter ”bbc.html.”

Om du dubbelklickar på den filen öppnas din standardwebbläsare så att den hämtade webbsidan visas.

Observera att adressen i webbläsarens adressfält är en lokal fil på den här datorn, inte en fjärrwebbplats.

Vi behöver inte omdirigera utdata för att skapa en fil. Vi kan skapa en fil genom att använda alternativet -o (utgång) och säga till curl att skapa filen. Här använder vi alternativet -o och anger namnet på filen vi vill skapa ”bbc.html.”

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

Använda en förloppsindikator för att övervaka nedladdningar

För att få den textbaserade nedladdningsinformationen ersatt av en enkel förloppsindikator, använd alternativet -# (förloppsindikator).

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

Startar om en avbruten nedladdning

Det är lätt att starta om en nedladdning som har avslutats eller avbrutits. Låt oss börja en nedladdning av en stor fil. Vi kommer att använda den senaste Long Term Support-versionen av Ubuntu 18.04. Vi använder alternativet –output för att ange namnet på filen vi vill spara den i: ”ubuntu180403.iso.”

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

Nedladdningen startar och arbetar sig mot slutförandet.

Om vi ​​tvångsavbryter nedladdningen med Ctrl+C återgår vi till kommandotolken och nedladdningen avbryts.

För att starta om nedladdningen, använd alternativet -C (fortsätt vid). Detta gör att curl startar om nedladdningen vid en angiven punkt eller förskjutning inom målfilen. Om du använder ett bindestreck – som förskjutning, kommer curl att titta på den redan nedladdade delen av filen och bestämma rätt förskjutning att använda för sig själv.

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

Nedladdningen startas om. curl rapporterar förskjutningen vid vilken den startar om.

Hämtar HTTP-rubriker

Med alternativet -I (huvud) kan du bara hämta HTTP-rubrikerna. Detta är samma sak som att skicka Kommandot HTTP HEAD till en webbserver.

curl -I www.twitter.com

Detta kommando hämtar endast information; den laddar inte ner några webbsidor eller filer.

Ladda ner flera webbadresser

Med hjälp av xargs kan vi ladda ner flera webbadresser genast. Vi kanske vill ladda ner en serie webbsidor som utgör en enda artikel eller handledning.

Kopiera dessa webbadresser till en redigerare och spara dem i en fil som heter ”urls-to-download.txt.” Vi kan använda xargs för att behandla innehållet i varje rad av textfilen som en parameter som den i sin tur matar till curl.

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

Det här är kommandot vi behöver använda för att få xargs att skicka dessa webbadresser för att krulla en i taget:

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 räknar ut att vi pekar den mot en FTP-server och returnerar en lista över de filer som finns på servern.

Den enda filen på den här servern är en "readme.txt"-fil, på 403 byte lång. Låt oss hämta det. Använd samma kommando som för ett ögonblick sedan, med filnamnet bifogat:

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

Filen hämtas och curl visar dess innehåll i terminalfönstret.

I nästan alla fall kommer det att vara bekvämare att ha den hämtade filen sparad på disk för oss, snarare än att visas i terminalfönstret. Återigen kan vi använda kommandot -O (fjärrfil) för att spara filen på disken, med samma filnamn som den har på fjärrservern.

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

Filen hämtas och sparas på disk. Vi kan använda ls för att kontrollera fildetaljerna. Den har samma namn som filen på FTP-servern, och den är lika lång, 403 byte.

ls -hl readme.txt

Skicka parametrar till fjärrservrar

Vissa fjärrservrar accepterar parametrar i förfrågningar som skickas till dem. Parametrarna kan användas för att formatera den returnerade datan, till exempel, eller de kan användas för att välja exakt den data som användaren vill hämta. Det är ofta möjligt att interagera med webben gränssnitt för applikationsprogrammering (API) med curl.

Som ett enkelt exempel ipify webbplatsen har ett API kan frågas för att fastställa din externa IP-adress.

curl https://api.ipify.org

Genom att lägga till formatparametern till kommandot, med värdet "json" kan vi återigen begära vår externa IP-adress, men den här gången kommer den returnerade datan att kodas i JSON-format.

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

Här är ett annat exempel som använder ett Google API. Den returnerar ett JSON-objekt som beskriver en bok. Parametern du måste ange är International Standard Book Number (ISBN)-nummer för en bok. Du hittar dessa på baksidan av de flesta böcker, vanligtvis under en streckkod. Parametern vi kommer att använda här är "0131103628."

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

De returnerade uppgifterna är omfattande:

Ibland curl, ibland wget

Om jag ville ladda ner innehåll från en webbplats och få trädstrukturen på webbplatsen att söka rekursivt efter det innehållet, skulle jag använda wget.

Om jag ville interagera med en fjärrserver eller API, och eventuellt ladda ner några filer eller webbsidor, skulle jag använda curl. Speciellt om protokollet var ett av de många som inte stöds av wget.