Sådan bruges curl til at downloade filer fra Linux Command Line

Linux- curlkommandoen kan gøre meget mere end at downloade filer. Find ud af, hvad der curler i stand til, og hvornår du skal bruge det i stedet for wget.

curl vs. wget: Hvad er forskellen?

Folk kæmper ofte for at identificere de relative styrker af wgetog curlkommandoer. Kommandoerne har en vis funktionel overlapning. De kan hver især hente filer fra fjerntliggende placeringer, men det er her ligheden slutter.

wgeter et fantastisk værktøj til download af indhold og filer. Det kan downloade filer, websider og mapper. Den indeholder intelligente rutiner til at krydse links på websider og rekursivt downloade indhold på tværs af et helt websted. Det er uovertruffen som download-kommandolinjemanager.

curlopfylder et helt andet behov. Ja, det kan hente filer, men det kan ikke rekursivt navigere på et websted på udkig efter indhold, der skal hentes. Hvad der curlrent faktisk gør, er at lade dig interagere med eksterne systemer ved at stille anmodninger til disse systemer og hente og vise deres svar til dig. Disse svar kan meget vel være websideindhold og filer, men de kan også indeholde data, der leveres via en webservice eller API som et resultat af "spørgsmålet", der stilles af curl-anmodningen.

Og curler ikke begrænset til websteder. curlunderstøtter over 20 protokoller, inklusive HTTP, HTTPS, SCP, SFTP og FTP. Og uden tvivl, på grund af sin overlegne håndtering af Linux-rør, curlkan det lettere integreres med andre kommandoer og scripts.

Forfatteren af curlhar en webside, der beskriver de forskelle, han ser mellem curlog wget.

Installation af krøller

Ud af de computere, der blev brugt til at undersøge denne artikel, var Fedora 31 og Manjaro 18.1.0 curl allerede installeret. curlskulle installeres på Ubuntu 18.04 LTS. På Ubuntu skal du køre denne kommando for at installere den:

sudo apt-get install krølle

Krølleversionen

De --versionoption mærker  curlrapporterer sin version. Den viser også alle de protokoller, den understøtter.

krølle - version

Henter en webside

Hvis vi peger curlpå en webside, henter den den for os.

krølle //www.bbc.com

Men dens standardhandling er at dumpe det til terminalvinduet som kildekode.

Pas på : Hvis du ikke fortæller, at curldu vil have noget gemt som en fil, vil det altid dumpe det til terminalvinduet. Hvis filen, den henter, er en binær fil, kan resultatet være uforudsigeligt. Skallen kan forsøge at fortolke nogle af byteværdierne i den binære fil som kontroltegn eller escape-sekvenser.

Gemme data i en fil

Lad os fortælle krølle at omdirigere output til en fil:

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

Denne gang ser vi ikke de hentede oplysninger, de sendes direkte til filen for os. Da der ikke er noget terminalvinduesoutput at vise, curludsender et sæt statusoplysninger.

Det gjorde det ikke i det foregående eksempel, fordi statusoplysningerne ville være spredt over websidens kildekode, så curlundertrykkes det automatisk.

I dette eksempel  curlregistrerer det, at output omdirigeres til en fil, og at det er sikkert at generere statusoplysninger.

Oplysningerne er:

  • % I alt : Det samlede beløb, der skal hentes.
  • % Modtaget : Procentdelen og de faktiske værdier af de data, der hidtil er hentet.
  • % Xferd : Procentdelen og faktisk sendt, hvis data uploades.
  • Gennemsnitlig hastighed Dload : Den gennemsnitlige downloadhastighed.
  • Upload af gennemsnitshastighed: Den gennemsnitlige uploadhastighed.
  • Tid i alt : Den estimerede samlede varighed af overførslen.
  • Tidsforbrug : Den forløbne tid til denne overførsel.
  • Tid tilbage : Den estimerede tid tilbage til overførslen er afsluttet
  • Aktuel hastighed : Den aktuelle overførselshastighed for denne overførsel.

Fordi vi omdirigerede output fra curl til en fil, har vi nu en fil kaldet "bbc.html."

Dobbeltklik på den fil åbner din standardbrowser, så den viser den hentede webside.

Bemærk, at adressen i browserens adresselinje er en lokal fil på denne computer, ikke et eksternt websted.

Vi behøver ikke at omdirigere output for at oprette en fil. Vi kan oprette en fil ved hjælp af indstillingen -o(output) og fortælle, curlat vi skal oprette filen. Her bruger vi -oindstillingen og giver navnet på den fil, vi ønsker at oprette "bbc.html."

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

Using a Progress Bar To Monitor Downloads

To have the text-based download information replaced by a simple progress bar, use the -# (progress bar) option.

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

Restarting an Interrupted Download

It is easy to restart a download that has been terminated or interrupted. Let’s start a download of a sizeable file. We’ll use the latest Long Term Support build of Ubuntu 18.04. We’re using the --output option to specify the name of the file we wish to save it into: “ubuntu180403.iso.”

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

The download starts and works its way towards completion.

If we forcibly interrupt the download with Ctrl+C , we’re returned to the command prompt, and the download is abandoned.

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 ville interagere med en ekstern server eller API og muligvis downloade nogle filer eller websider, ville jeg bruge curl. Især hvis protokollen var en af ​​de mange, der ikke blev understøttet af wget.