Hvordan bruke curl for å laste ned filer fra Linux Command Line

Linux- curlkommandoen kan gjøre mye mer enn å laste ned filer. Finn ut hva som curler i stand til, og når du skal bruke den i stedet for wget.

curl vs. wget: Hva er forskjellen?

Folk sliter ofte med å identifisere den relative styrken til wgetog curlkommandoer. Kommandoene har en viss funksjonell overlapping. De kan hente filer hver fra eksterne steder, men det er der likheten ender.

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

curltilfredsstiller et helt annet behov. Ja, det kan hente filer, men det kan ikke rekursivt navigere på et nettsted på jakt etter innhold å hente. Det som curlfaktisk gjør er å la deg samhandle med eksterne systemer ved å gjøre forespørsler til disse systemene, og hente og vise svarene dine for deg. Disse svarene kan godt være websidens innhold og filer, men de kan også inneholde data levert via en webtjeneste eller API som et resultat av "spørsmålet" som ble stilt av curl-forespørselen.

Og curler ikke begrenset til nettsteder. curlstø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, curlkan det lettere integreres med andre kommandoer og skript.

Forfatteren av curlhar en webside som beskriver forskjellene han ser mellom curlog wget.

Installere krøll

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

sudo apt-get install curl

Krøllversjonen

De --versionalternativet gjør  curlrapportere sin versjon. Den viser også alle protokollene den støtter.

krøll - versjon

Henter en webside

Hvis vi peker curlpå en webside, vil den hente den for oss.

krølle //www.bbc.com

Men standardhandlingen er å dumpe den til terminalvinduet som kildekode.

Vær forsiktig : Hvis du ikke forteller at curldu vil ha noe lagret som en fil, vil det alltid dumpe det til terminalvinduet. Hvis filen den henter er en binær fil, kan resultatet være uforutsigbart. Skallet kan prøve å tolke noen av byteverdiene i den binære filen som kontrolltegn eller rømningssekvenser.

Lagre data i en fil

La oss si at curl skal omdirigere utdataene til en fil:

krølle //www.bbc.com> bbc.html

Denne gangen ser vi ikke hentet informasjon, den sendes rett til filen for oss. Fordi det ikke er noe terminalvinduutgang å vise, curlsender det ut et sett med fremdriftsinformasjon.

Det gjorde ikke dette i forrige eksempel fordi fremdriftsinformasjonen ville blitt spredt over kildekoden på websiden, så curlundertrykket den automatisk.

I dette eksemplet  curloppdager det at utdataene blir omdirigert til en fil og at det er trygt å generere fremdriftsinformasjonen.

Informasjonen som er gitt er:

  • % Totalt : Det totale beløpet som skal hentes.
  • % Mottatt : Prosentandelen og faktiske verdier av dataene som er hentet så langt.
  • % Xferd : Prosentandelen og faktisk sendt hvis data blir lastet opp.
  • Gjennomsnittlig hastighet : Den gjennomsnittlige nedlastingshastigheten.
  • Gjennomsnittlig hastighetsopplasting : Gjennomsnittlig opplastningshastighet.
  • Tid totalt : Anslått total varighet av overføringen.
  • Tidsbruk : Forløpt tid så langt for denne overføringen.
  • Tid igjen : Anslått gjenstående tid for overføringen å fullføres
  • Gjeldende hastighet : Gjeldende overføringshastighet for denne overføringen.

Fordi vi omdirigerte utdata fra curl til en fil, har vi nå en fil som heter "bbc.html."

Hvis du dobbeltklikker på den filen, åpnes standardleseren din slik at den viser den hentede websiden.

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

Vi trenger ikke å omdirigere utdataene for å opprette en fil. Vi kan opprette en fil ved å bruke alternativet -o(output) og fortelle at vi curlskal lage filen. Her bruker vi -oalternativet og oppgir navnet på filen vi ønsker å lage "bbc.html."

krølle -o bbc.html //www.bbc.com

Bruke en fremdriftslinje for å overvåke nedlastinger

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

krølle -x -o bbc.html //www.bbc.com

Start en avbrutt nedlasting på nytt

Det er enkelt å starte en nedlasting som er avsluttet eller avbrutt. La oss starte en nedlasting av en betydelig fil. Vi bruker den siste versjonen av langvarig støtte av Ubuntu 18.04. Vi bruker --outputmuligheten til å spesifisere navnet på filen vi ønsker å lagre den i: “ubuntu180403.iso.”

krøll - utgang ubuntu18043.iso //releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

Nedlastingen starter og jobber seg mot fullføring.

Hvis vi tvangsavbryter nedlastingen med Ctrl+C, returneres vi til ledeteksten, og nedlastingen blir forlatt.

To restart the download, use the -C (continue at) option. This causes curl to restart the download at a specified point or offset within the target file. If you use a hyphen - as the offset, curl will look at the already downloaded portion of the file and determine the correct offset to use for itself.

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

The download is restarted. curl reports the offset at which it is restarting.

Retrieving HTTP headers

With the -I (head) option, you can retrieve the HTTP headers only. This is the same as sending the HTTP HEAD command to a web server.

curl -I www.twitter.com

This command retrieves information only; it does not download any web pages or files.

Downloading Multiple URLs

Using xargs we can download multiple URLs at once. Perhaps we want to download a series of web pages that make up a single article or tutorial.

Copy these URLs to an editor and save it to a file called “urls-to-download.txt.” We can use xargs to treat the content of each line of the text file as a parameter which it will feed to curl, in turn.

//tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5

This is the command we need to use to have xargs pass these URLs to curl one at a time:

xargs -n 1 curl -O < urls-to-download.txt

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.

RELATED:How to Use the xargs Command on Linux

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 figures out that we’re pointing it at an FTP server, and returns a list of the files that are present on the server.

The only file on this server is a “readme.txt” file, of 403 bytes in length. Let’s retrieve it. Use the same command as a moment ago, with the filename appended to it:

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

The file is retrieved and curl displays its contents in the terminal window.

In almost all cases, it is going to be more convenient to have the retrieved file saved to disk for us, rather than displayed in the terminal window. Once more we can use the -O (remote file) output command to have the file saved to disk, with the same filename that it has on the remote server.

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

The file is retrieved and saved to disk. We can use ls to check the file details. It has the same name as the file on the FTP server, and it is the same length, 403 bytes.

ls -hl readme.txt

RELATED:How to Use the FTP Command on Linux

Sending Parameters to Remote Servers

Some remote servers will accept parameters in requests that are sent to them. The parameters might be used to format the returned data, for example, or they may be used to select the exact data that the user wishes to retrieve. It is often possible to interact with web application programming interfaces (APIs) using curl.

As a simple example, the ipify website has an API can be queried to ascertain your external IP address.

curl //api.ipify.org

By adding the format parameter to the command, with the value of “json” we can again request our external IP address, but this time the returned data will be encoded in the JSON format.

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

Here’s another example that makes use of a Google API. It returns a JSON object describing a book. The parameter you must provide is the International Standard Book Number (ISBN) number of a book. You can find these on the back cover of most books, usually below a barcode. The parameter we’ll use here is “0131103628.”

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

The returned data is comprehensive:

Sometimes curl, Sometimes wget

If I wanted to download content from a website and have the tree-structure of the website searched recursively for that content, I’d use wget.

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