Tips en Trucs 2019

Downloaden met curl

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.

Curl gebruiken

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.

Downloaden

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

Meerdere bestanden downloaden

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

Doorverwijzingen volgen

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.

Het downloaden hervatten

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

HTTP header informatie ophalen

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

HTTPS/2 test

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.

Een browser nabootsen

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>

Bandbreedte beperken

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.

FTP

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

Cookies

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
curl