Curl is een terminal programma om gegevens over te zetten van en naar servers zonder tussenkomst van gebruikers. Met curl kan je gegevens downloaden en uploaden via HTTP, HTTPS, SCP, SFTP en FTP. Daarenboven ondersteunt curl met behulp van opties het verderzetten van een onderbroken transfer, bandbreedtebeperking, proxy's, gebruikers authentificatie en nog veel meer.
Curl is in de meeste distributies en openSUSE Leap 15.1 standaard geïnstalleerd.
In zijn eenvoudigste vorm start je curl enkel met een URL. De inhoud van de URL wordt dan in de terminal weergegeven.
dany@pindabook:~> curl linux.pindanet.be
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://linux.pindanet.be/">here</a>.</p>
</body></html>
Daar geen protocol werd opgegeven, probeert curl het protocol zelf te achterhalen, mislukt dit, dan wordt standaard HTTP gebruikt.
Om de gedownloade gegevens in een bestand met de oorspronkelijke bestandsnaam op te slaan, gebruik je de optie -O:
dany@pindabook:~> curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 334k 100 334k 0 0 1295k 0 --:--:-- --:--:-- --:--:-- 1290k
Om de download zelf een naam te geven, gebruik je de optie -o:
dany@pindabook:~>curl -o vue-v2.6.11.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 334k 100 334k 0 0 2512k 0 --:--:-- --:--:-- --:--:-- 2512k dany@pindabook:~>ls -l vue*.js
-rw-r--r-- 1 dany users 342146 14 dec 14:02 vue.js -rw-r--r-- 1 dany users 342146 14 dec 14:04 vue-v2.6.11.js
Met de -O optie kan je meerdere URL's opgeven en downloaden:
dany@pindabook:~> curl -O https://download.opensuse.org/distribution/leap/15.1/iso/openSUSE-Leap-15.1-NET-x86_64.iso -O https://download.opensuse.org/tumbleweed/iso/openSUSE-Tumbleweed-NET-x86_64-Current.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 381 100 381 0 0 940 0 --:--:-- --:--:-- --:--:-- 940
100 378 100 378 0 0 13500 0 --:--:-- --:--:-- --:--:-- 13500
Standaard volgt curl geen doorverwijzingen in de HTTP Location Headers. Dit zag je duidelijk in het eerste en vorige voorbeeld. Een installatie ISO bestand met een grootte van slechts 381 bytes lijkt me wat te klein. Met de -L optie volgt curl de doorverwijzingen om uiteindelijk het gewenste bestand te downloaden:
dany@pindabook:~> curl -L -O https://download.opensuse.org/distribution/leap/15.1/iso/openSUSE-Leap-15.1-NET-x86_64.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 381 100 381 0 0 2609 0 --:--:-- --:--:-- --:--:-- 2609
18 125M 18 22.7M 0 0 8618k 0 0:00:14 0:00:02 0:00:12 9998k^C
Met een druk op de sneltoets Ctrl+c werd het downloaden hierboven afgebroken.
Om een afgebroken download verder te downloaden, gebruik je de -C - optie. Handig bij het wegvallen van een verbinding tijdens het downloaden van een groot bestand en zo het downloaden terug verder te zetten. De hierboven afgebroken download opdracht, hervat je met:
dany@pindabook:~> curl -C - -L -O https://download.opensuse.org/distribution/leap/15.1/iso/openSUSE-Leap-15.1-NET-x86_64.iso
** Resuming transfer from byte position 28913664
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 381 100 381 0 0 2381 0 --:--:-- --:--:-- --:--:-- 2366
100 97.4M 100 97.4M 0 0 8563k 0 0:00:11 0:00:11 --:--:-- 9175k
De HTTP header bevat informatie over de user agent, type inhoud, encoding, enz. Deze informatie wordt tussen de client (aanvrager) en server (zender) uitgewisseld tijdens een transport. Met de -I optie vraag je de HTTP header op:
dany@pindabook:~> curl -I --http2 https://linux.pindanet.be
HTTP/2 200
date: Sat, 14 Dec 2019 13:34:35 GMT
server: Apache
last-modified: Sat, 07 Dec 2019 18:33:04 GMT
vary: Accept-Encoding
content-type: text/html
x-varnish: 53806794
age: 0
via: 1.1 varnish (Varnish/6.3)
etag: W/"188e-5992164993316-gzip"
accept-ranges: bytes
Om te controleren of een website het HTTP/2 protocol ondersteunt gebruik je de -I optie samen met de --http2 optie:
dany@pindabook:~> curl -I --http2 -s https://linux.pindanet.be | grep HTTP
HTTP/2 200
Bij HTTP/1.1 krijg je de volgende uitvoer:
dany@pindabook:~> curl -I --http2 -s https://www.snt.be | grep HTTP
HTTP/1.1 200 OK
De -s (--silent) optie zorgt voor het weglaten van de voortgangsmeter en foutmeldingen. Vanaf curl 7.47.0 mag je de --http2 optie weglaten, deze wordt namelijk standaard bij HTTP verbindingen gebruikt.
Sommige servers zijn alleen toegankelijk voor bepaalde klassieke browsers of bieden alternatieve inhoud op basis van de gebruikte browser. De gebruikte browser stuurt User Agent informatie naar de server om zich kenbaar te maken. Met curl kan je via de -A optie zelf een User Agent of browser informatie meesturen:
dany@pindabook:~> curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0" https://linux.pindanet.be
<!DOCTYPE html>
<html lang="nl-BE">
<head>
<meta charset="utf-8" />
<title>Linux tips en trucs (getest op openSUSE) Pindanet</title>
<meta name="description" content="Deze Nederlandstalige Linux site bevat vooral tips en trucs voor openSUSE, waaronder een Nederlandstalige AZERTY Live DVD en een Virtuele Webserver voor scholen." />
<meta name="keywords" content="linux, opensuse, accb, brugge, west, vlaanderen, dany, pinoy, pindanet, tips, trucs, tricks, live, backup, webserver" />
...
<link rel="stylesheet" type="text/css" href="linux.css">
</head>
<body>
<h1 id="viewertitel">Linux PindaNet</h1>
...
</body>
Met de --limit-rate optie kan je de gebruikte bandbreedte (snelheid) beperken. De waarde kan je uitdrukken in bytes, kilobytes (k), megabytes (m) of gigabytes (g). Het volgende voorbeeld beperkt de downloadsnelheid tot 1mb:
dany@pindabook:~> curl --limit-rate 1m -L -O https://download.opensuse.org/tumbleweed/iso/openSUSE-Tumbleweed-NET-x86_64-Current.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 378 100 378 0 0 2625 0 --:--:-- --:--:-- --:--:-- 2625
100 393 100 393 0 0 2057 0 --:--:-- --:--:-- --:--:-- 2057
100 136M 100 136M 0 0 1020k 0 0:02:16 0:02:16 --:--:-- 1035k
Handig als je internetbandbreedte tijdens het downloaden wilt beschikbaar houden voor andere taken.
Om toegang te krijgen tot een FTP server gebruik je de -u optie om een gebruikersnaam (pc10 in het voorbeeld) en wachtwoord (snt+4567 in het voorbeeld) mee te sturen. Met de -T optie upload je een bestand naar de FTP server:
dany@pindabook:~> curl -T openSUSE-Leap-15.1-NET-x86_64.iso -u pc10:snt+4567 ftp://localhost/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 125M 0 0 100 125M 0 1126M --:--:-- --:--:-- --:--:-- 1126M
Een lijst met bestanden op de FTP server krijg je met de opdracht:
dany@pindabook:~> curl -u pc10:snt+4567 ftp://localhost/
-rw-r--r-- 1 pc10 wwwrun 131072000 Dec 14 14:17 openSUSE-Leap-15.1-NET-x86_64.iso
En een bestand downloaden van een FTP server:
dany@pindabook:~> curl -O -u pc10:snt+4567 ftp://localhost/openSUSE-Leap-15.1-NET-x86_64.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 125M 100 125M 0 0 595M 0 --:--:-- --:--:-- --:--:-- 595M
Soms moet je om een bestand te downloaden een cookie meesturen.
Standaard stuurt of bewaard curl geen cookies.
Met de -b optie kan je een cookie tekst of bestand meesturen.
Om het Oracle Java JDK rpm bestand te downloaden, moet je de cookie oraclelicense
met de waarde a
meesturen:
dany@pindabook:~> curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 543 100 543 0 0 920 0 --:--:-- --:--:-- --:--:-- 920
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 7073 100 7073 0 0 1797 0 0:00:03 0:00:03 --:--:-- 2261