Wat is curl en hoe gebruik je het veilig?

Auteur: Gepubliceerd

In het kort: curl is een opdrachtregelprogramma voor het overdragen van gegevens tussen een computer en een server. Je kunt er onder meer bestanden mee downloaden, de reactie van een website controleren en gegevens naar een API sturen: een interface waarmee programma’s met elkaar communiceren. Het werkt zonder grafische browser en is daardoor nuttig voor diagnose en automatisering.

Waarvoor gebruik je curl en hoe verschilt het van een browser?

Je start curl in de terminal: je voert een opdracht en een adres in, eventueel met opties die bepalen hoe het programma werkt. Het ondersteunt verschillende communicatieprotocollen, waaronder HTTP en HTTPS, die door websites worden gebruikt. In de praktijk wordt curl vaak gebruikt om webdiensten te controleren en met een API te werken.

Een browser haalt een pagina op, interpreteert de code en geeft de interface weer. curl toont de ontvangen gegevens standaard in de terminal, bijvoorbeeld HTML-code of een antwoord in JSON, een tekstformaat voor gegevens dat door veel interfaces van het type API wordt gebruikt. Het voert geen JavaScript uit en geeft de pagina niet visueel weer. Het vervangt dus geen test van het uiterlijk en de werking van een pagina in de browser.

Als een formulier op een website niet werkt, kan curl bijvoorbeeld helpen controleren of de server het verzoek accepteert en hoe die erop reageert. Het laat echter niet zien of de formulierknop correct aan de JavaScript-code is gekoppeld.

Bij curl hoort de bibliotheek libcurl, die ontwikkelaars in hun eigen applicaties kunnen gebruiken. De opdracht curl is een kant-en-klaar programma; libcurl is een verzameling functies waarmee je software voor gegevensoverdracht kunt bouwen.

Hoe controleer je of curl beschikbaar is en verstuur je een eerste verzoek?

Open de terminal en voer het volgende in:

curl --version

Als curl beschikbaar is, zie je het versienummer en informatie over de ondersteunde functies. Herkent het systeem de opdracht niet, installeer het programma dan via de pakketbeheerder van je systeem of volgens de officiële instructies van het curl-project. Welke protocollen en opties beschikbaar zijn, kan afhangen van de versie en van de manier waarop het programma is gebouwd.

In sommige oudere Windows PowerShell-omgevingen kan de naam curl naar een andere opdracht verwijzen. Gebruik in dat geval curl.exe om het juiste programma aan te roepen.

Het eenvoudigste verzoek ziet er zo uit:

curl https://example.com

Voor een adres met HTTP of HTTPS verstuurt curl standaard een GET-verzoek: een verzoek om een resource op te halen. Het antwoord wordt naar de standaarduitvoer geschreven, meestal de terminal. Zet adressen met speciale tekens, zoals &, tussen aanhalingstekens, zodat de shell die tekens niet als onderdeel van zijn eigen syntaxis interpreteert.

Hoe controleer je headers en omleidingen?

Headers bij HTTP bevatten informatie die met een verzoek of antwoord wordt meegestuurd, zoals het type inhoud en instructies voor de cache. Om de server alleen om de antwoordheaders te vragen, gebruik je:

curl -I https://example.com

De optie -I verstuurt een HEAD-verzoek. Niet elke server behandelt dit op dezelfde manier als GET. Wil je de antwoordheaders van een gewone pagina-aanvraag samen met de inhoud zien, gebruik dan -i.

curl volgt omleidingen via HTTP standaard niet. Met de optie -L kan het programma het door de server opgegeven adres volgen:

curl -i -L https://example.com

De statuscode 200 duidt meestal op een geslaagd antwoord, 404 op een ontbrekende resource en 500 op een serverfout. De code alleen bewijst echter niet dat de pagina correct werkt: een antwoord met 200 kan een foutmelding bevatten in plaats van de verwachte gegevens.

Voor een uitgebreidere diagnose gebruik je -v. Deze optie toont onder meer verbindingsdetails en de uitgewisselde headers. Verwijder tokens, cookies en andere vertrouwelijke informatie voordat je zo’n log deelt.

Hoe download je een bestand en stuur je gegevens naar een API?

Om het antwoord in een bestand op te slaan in plaats van het in de terminal weer te geven, gebruik je de optie -o:

curl -f -L -o document.pdf https://example.com/dokument.pdf

Dit is een voorbeeld van de syntaxis; het genoemde bestand hoeft niet te bestaan. -o bepaalt de lokale bestandsnaam, -L volgt omleidingen en -f zorgt voor een foutmelding bij antwoorden via HTTP die op een mislukking wijzen, in beginsel vanaf statuscode 400. Zonder -f kan curl succesvol afsluiten, ook als het een foutpagina heeft ontvangen. Opslaan in een bestaand bestand kan de inhoud ervan overschrijven.

Gegevens versturen naar een API kan er zo uitzien:

curl -i https://api.example.com/items -H "Content-Type: application/json" --data '{"name":"test"}'

De optie -H voegt een header toe. --data geeft de inhoud van het verzoek mee en kiest standaard de methode POST, die vaak wordt gebruikt om gegevens te versturen. Dit voorbeeld gaat uit van een terminal die de syntaxis van de Bash-shell ondersteunt; de regels voor aanhalingstekens kunnen in Windows anders zijn. Raadpleeg de documentatie van de betreffende API voor het werkelijke adres, de verplichte velden en de authenticatiemethode.

Hoe gebruik je curl veilig?

curl kan niet alleen gegevens lezen, maar ook bewerkingen uitvoeren die de toestand van een dienst wijzigen. Controleer voordat je een opdracht van iemand anders uitvoert het doeladres, de meegestuurde gegevens en de opties. Een aanroep van een API kan een record aanmaken, een resource verwijderen of een betaalde bewerking starten.

Gebruik de optie -k of --insecure niet routinematig: daarmee schakel je de controle van het TLS-certificaat uit, dat helpt de identiteit van de server te bevestigen. Je kunt beter de oorzaak van een certificaatfout achterhalen dan de fout verbergen. Voer ook geen gedownload script uit zonder de inhoud te controleren, zeker niet met een opdracht die curl rechtstreeks aan de shell koppelt.

Begin met het ophalen van een openbare resource via curl -i, bekijk de statuscode en de headers en ga pas daarna verder met verzoeken die gegevens versturen.

Zie ook: Wat is een API?

Lees ook

Lees hoe PHP-FPM PHP-verzoeken verwerkt, verschilt van een webserver en hoe je processen afstemt op verkeer en hostingcapaciteit.
Ontdek hoe BIND als open DNS-serversoftware domeinen beheert, welke rollen het vervult en wanneer zelf beheren zinvol is.
Lees wat het Poolse REGON-register en -nummer betekenen, hoe ze verschillen van NIP en KRS en hoe je bedrijfsgegevens controleert.