Curl gebruiken om bestanden te downloaden vanaf de Linux-opdrachtregel

Een terminalvenster op een Linux-desktop in Ubuntu-stijl.
Fatmawati Achmad Zaenuri / Shutterstock

Het Linux curl commando kan veel meer doen dan bestanden downloaden. Zoek uit wat curl is in staat, en wanneer u het zou moeten gebruiken in plaats van wget.

curl vs. wget: wat is het verschil?

Mensen hebben vaak moeite om de relatieve sterke punten van de wget en curl commando’s. De commando’s hebben enige functionele overlap. Ze kunnen elk bestanden ophalen van externe locaties, maar daar houdt de gelijkenis op.

wget is een fantastische tool voor het downloaden van inhoud en bestanden. Het kan bestanden, webpagina’s en mappen downloaden. Het bevat intelligente routines om links op webpagina’s te doorlopen en recursief inhoud te downloaden over een hele website. Het is onovertroffen als een downloadmanager via de opdrachtregel.

curl voldoet aan een heel andere behoefte. Ja, het kan bestanden ophalen, maar het kan niet recursief door een website navigeren op zoek naar inhoud om op te halen. Wat curl eigenlijk is het u laten communiceren met systemen op afstand door verzoeken in te dienen bij die systemen en hun antwoorden op te halen en aan u te tonen. Die reacties kunnen inhoud en bestanden van webpagina’s zijn, maar ze kunnen ook gegevens bevatten die via een webservice of API worden verstrekt als resultaat van de “vraag” die door het curl-verzoek wordt gesteld.

En curl is niet beperkt tot websites. curl ondersteunt meer dan 20 protocollen, waaronder HTTP, HTTPS, SCP, SFTP en FTP. En misschien wel, vanwege de superieure afhandeling van Linux-leidingen, curl kan gemakkelijker worden geïntegreerd met andere opdrachten en scripts.

De auteur van curl heeft een webpagina die de verschillen beschrijft die hij tussen ziet curl en wget.

Curl installeren

Van de computers die werden gebruikt om dit artikel te onderzoeken, hadden Fedora 31 en Manjaro 18.1.0 curl al geïnstalleerd. curl moest worden geïnstalleerd op Ubuntu 18.04 LTS. Voer op Ubuntu deze opdracht uit om het te installeren:

sudo apt-get install curl

sudo apt-get install curl in een terminalvenster

De curl-versie

De --version optie maakt curlrapporteer zijn versie. Het bevat ook alle protocollen die het ondersteunt.

curl --version

curl --version in een terminalvenster

Een webpagina ophalen

Als we wijzen curl op een webpagina, zal het deze voor ons ophalen.

curl https://www.bbc.com

curl https://www.bbc.com in een terminalvenster

Maar de standaardactie is om het als broncode naar het terminalvenster te dumpen.

Uitvoer van curl die de broncode van een webpagina in een terminalvenster weergeeft

Pas op: Als je het niet vertelt curl u wilt dat iets als een bestand wordt opgeslagen, dan zal het altijd dump het naar het terminalvenster. Als het bestand dat wordt opgehaald een binair bestand is, kan de uitkomst onvoorspelbaar zijn. De shell kan proberen om enkele bytewaarden in het binaire bestand te interpreteren als controletekens of escape-reeksen.

Gegevens opslaan in een bestand

Laten we curl vertellen om de uitvoer om te leiden naar een bestand:

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

curl https://www.bbc.com> bbc.html in een terminalvenster” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Deze keer zien we de opgehaalde informatie niet, deze wordt voor ons rechtstreeks naar het bestand gestuurd.  Omdat er geen output van het terminalvenster is om weer te geven, <code>curl</code> geeft een reeks voortgangsinformatie weer.</p>
<p>Het deed dit niet in het vorige voorbeeld omdat de voortgangsinformatie verspreid zou zijn over de broncode van de webpagina, dus <code>curl</code> automatisch onderdrukt.</p>
<p>In dit voorbeeld <code>curl</code> detecteert dat de uitvoer wordt omgeleid naar een bestand en dat het veilig is om de voortgangsinformatie te genereren.</p>
<p><img loading=

De verstrekte informatie is:

  • % Totaal: Het totale op te halen bedrag.
  • % Ontvangen: Het percentage en de werkelijke waarden van de gegevens die tot dusver zijn opgehaald.
  • % Xferd: Het percentage en het werkelijk verzonden, als gegevens worden geüpload.
  • Gemiddelde snelheid Dload: De gemiddelde downloadsnelheid.
  • Upload met gemiddelde snelheid: De gemiddelde uploadsnelheid.
  • Tijd totaal: De geschatte totale duur van de overdracht.
  • Tijd besteed: De verstreken tijd tot dusver voor deze overdracht.
  • Tijd over: De geschatte resterende tijd voordat de overdracht is voltooid
  • Huidige snelheid: De huidige overdrachtssnelheid voor deze overdracht.

Omdat we de uitvoer hebben omgeleid van curl naar een bestand, hebben we nu een bestand met de naam ‘bbc.html’.

bbc.html-bestand gemaakt door curl.

Als u dubbelklikt op dat bestand, wordt uw standaardbrowser geopend, zodat de opgehaalde webpagina wordt weergegeven.

Opgehaalde webpagina weergegeven in een browservenster.

Merk op dat het adres in de adresbalk van de browser een lokaal bestand op deze computer is, geen externe website.

We hoeven niet omleiding de uitvoer om een ​​bestand te maken. We kunnen een bestand maken door de -o (output) optie, en vertellen curl om het bestand te maken. Hier gebruiken we de -o optie en geef de naam op van het bestand dat we willen maken “bbc.html”.

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

curl -o bbc.html https://www.bbc.com in een terminalvenster

Een voortgangsbalk gebruiken om downloads te volgen

Om de op tekst gebaseerde downloadinformatie te laten vervangen door een eenvoudige voortgangsbalk, gebruikt u de -# (voortgangsbalk) optie.

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

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

Een onderbroken download opnieuw starten

Het is gemakkelijk om een ​​download die is beëindigd of onderbroken opnieuw te starten. Laten we beginnen met het downloaden van een aanzienlijk bestand. We gebruiken de nieuwste versie van de langetermijnondersteuning van Ubuntu 18.04. We gebruiken de --output optie om de naam op te geven van het bestand waarin we het willen opslaan: “ubuntu180403.iso.”

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

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

De download begint en werkt zich een weg naar voltooiing.

Verloop van een grote download in een terminal widnow

Als we de download met geweld onderbreken met Ctrl+C , worden we teruggebracht naar de opdrachtprompt en wordt het downloaden afgebroken.

Gebruik het -C (ga verder bij) optie. Dit veroorzaakt curl om de download op een bepaald punt opnieuw te starten of compensatie binnen het doelbestand. Als u een koppelteken gebruikt - als de offset, curl kijkt naar het reeds gedownloade gedeelte van het bestand en bepaalt de juiste offset die voor zichzelf moet worden gebruikt.

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

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

De download wordt opnieuw gestart. curl meldt de offset waarop het herstart.

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

HTTP-headers ophalen

Met de -I (head) optie, kunt u alleen de HTTP-headers ophalen. Dit is hetzelfde als het verzenden van de HTTP HEAD-opdracht naar een webserver.

curl -I www.twitter.com

curl -I www.twitter.com in een terminalvenster

Dit commando haalt alleen informatie op; het downloadt geen webpagina’s of bestanden.

Uitvoer van curl -I www.twitter.com in een terminalvenster

Meerdere URL’s downloaden

Gebruik makend van xargs we kunnen meerdere URL’s tegelijk downloaden. Misschien willen we een reeks webpagina’s downloaden die samen één artikel of tutorial vormen.

Kopieer deze URL’s naar een editor en sla ze op in een bestand met de naam ‘urls-to-download.txt’. We kunnen gebruiken xargs om de inhoud van elke regel van het tekstbestand te behandelen als een parameter waarnaar het zal worden ingevoerd curl, op zijn beurt.

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

Dit is het commando dat we moeten gebruiken om te hebben xargs geef deze URL’s door aan curl een per keer:

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

Merk op dat deze opdracht de -O (extern bestand) uitvoeropdracht, die een hoofdletter “O” gebruikt. Deze optie veroorzaakt curl om het opgehaalde bestand op te slaan met dezelfde naam als het bestand op de externe server.

De -n 1 optie vertelt xargs om elke regel van het tekstbestand als een enkele parameter te behandelen.

Wanneer u de opdracht uitvoert, ziet u dat meerdere downloads na elkaar starten en eindigen.

Uitvoer van xargs en curl die meerdere bestanden downloaden

Als u in de bestandsbrowser controleert, ziet u dat de meerdere bestanden zijn gedownload. Elk draagt ​​de naam die het op de externe server had.

gedownload bestand in de nautilus-bestandsbrowser

VERWANT: Hoe de xargs-opdracht op Linux te gebruiken

Bestanden downloaden van een FTP-server

Gebruik makend van curl met een File Transfer Protocol (FTP) -server is eenvoudig, zelfs als u zich moet verifiëren met een gebruikersnaam en wachtwoord. Om een ​​gebruikersnaam en wachtwoord door te geven curl gebruik de -u (gebruiker) optie, en typ de gebruikersnaam, een dubbele punt “:” en het wachtwoord. Zet geen spatie voor of na de dubbele punt.

Dit is een gratis te testen FTP-server die wordt gehost door Rebex. De test-FTP-site heeft een vooraf ingestelde gebruikersnaam ‘demo’ en het wachtwoord is ‘wachtwoord’. Gebruik dit soort zwakke gebruikersnaam en wachtwoord niet op een productie- of “echte” FTP-server.

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

curl -u demo: wachtwoord ftp://test.rebex.net in een terminalvenster

curl komt erachter dat we het naar een FTP-server wijzen, en retourneert een lijst met de bestanden die op de server aanwezig zijn.

Lijst met bestanden op een remtoe FTP-server in een terminalvenster

Het enige bestand op deze server is een “readme.txt” -bestand van 403 bytes lang. Laten we het terughalen. Gebruik hetzelfde commando als een moment geleden, met de bestandsnaam eraan toegevoegd:

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

curl -u demo: wachtwoord ftp://test.rebex.net/readme.txt in een terminalvenster

Het bestand wordt opgehaald en curl geeft de inhoud weer in het terminalvenster.

De inhoud van een bestand dat is opgehaald van een FTP-server, wordt weergegeven in een terminalvenster

In bijna alle gevallen zal het handiger zijn om het opgehaalde bestand voor ons op schijf te laten opslaan in plaats van weergegeven in het terminalvenster. We kunnen opnieuw de -O (extern bestand) uitvoeropdracht om het bestand op schijf op te slaan, met dezelfde bestandsnaam als op de externe server.

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

curl -O -u demo: wachtwoord ftp://test.rebex.net/readme.txt in een terminalvenster

Het bestand wordt opgehaald en op schijf opgeslagen. We kunnen gebruiken ls om de bestandsdetails te controleren. Het heeft dezelfde naam als het bestand op de FTP-server en is even lang, 403 bytes.

ls -hl readme.txt

ls -hl readme.txt in een terminalvenster

VERWANT: Hoe de FTP-opdracht op Linux te gebruiken

Parameters naar externe servers verzenden

Sommige externe servers accepteren parameters in verzoeken die naar hen worden verzonden. De parameters kunnen bijvoorbeeld worden gebruikt om de geretourneerde gegevens op te maken, of ze kunnen worden gebruikt om de exacte gegevens te selecteren die de gebruiker wil ophalen. Het is vaak mogelijk om te communiceren met programmeerinterfaces voor webtoepassingen (API’s) met behulp van curl.

Als een eenvoudig voorbeeld: de ipify-website heeft een API die kan worden opgevraagd om uw externe IP-adres te achterhalen.

curl https://api.ipify.org

Door de format parameter toe aan het commando, met de waarde van “json” kunnen we opnieuw ons externe IP-adres opvragen, maar deze keer worden de geretourneerde data gecodeerd in het JSON-formaat.

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

curl https://api.ipify.org in een terminalvenster

Hier is nog een voorbeeld dat gebruik maakt van een Google API. Het retourneert een JSON-object dat een boek beschrijft. De parameter die u moet opgeven, is het International Standard Book Number (ISBN) -nummer van een boek. U vindt deze op de achterkant van de meeste boeken, meestal onder een streepjescode. De parameter die we hier gebruiken is ‘0131103628’.

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

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

De geretourneerde gegevens zijn uitgebreid:

API-gegevens van Google Book weergegeven in een terminalvenster

Soms krul, soms wget

Als ik inhoud van een website zou willen downloaden en de boomstructuur van de website recursief naar die inhoud zou laten zoeken, zou ik gebruiken wget.

Als ik wilde communiceren met een externe server of API en mogelijk enkele bestanden of webpagina’s wilde downloaden, zou ik curl. Vooral als het protocol een van de vele was die niet werd ondersteund door wget.

Nieuwste artikelen

spot_img

Related Stories

Leave A Reply

Vul alstublieft uw commentaar in!
Vul hier uw naam in