
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
De curl-versie
De --version
optie maakt curl
rapporteer zijn versie. Het bevat ook alle protocollen die het ondersteunt.
curl --version
Een webpagina ophalen
Als we wijzen curl
op een webpagina, zal het deze voor ons ophalen.
curl https://www.bbc.com
Maar de standaardactie is om het als broncode naar het terminalvenster te dumpen.
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
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’.
Als u dubbelklikt op dat bestand, wordt uw standaardbrowser geopend, zodat de opgehaalde webpagina wordt weergegeven.
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
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
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
De download begint en werkt zich een weg naar voltooiing.
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
De download wordt opnieuw gestart. curl
meldt de offset waarop het herstart.
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
Dit commando haalt alleen informatie op; het downloadt geen webpagina’s of bestanden.
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.
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.
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
komt erachter dat we het naar een FTP-server wijzen, en retourneert een lijst met de bestanden die op de server aanwezig zijn.
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
Het bestand wordt opgehaald en curl
geeft de inhoud weer in het 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
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
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
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
De geretourneerde gegevens zijn uitgebreid:
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
.