Introduction à la commande cURL

cURL est une commande Linux très répandue. On peut l’utiliser pour effectuer des requêtes HTTP, transférer des fichiers via FTP ou encore envoyer des e-mails.

Dans l’article ci-dessous, nous allons s’attarder sur les différentes utilisations de bases de cette commande avec le protocole HTTP.

Utilisation basique de la commande

 

Pour commencer, regardons ensemble quelques exemples simple de cURL sur linux. Par défaut, cURL affiche le résultat complet de la commande dans la console.

curl www.e-xpertsolutions.com

La commande ci-dessus affiche le résultat de la requête GET sur http://www.e-xpertsolutions.com sur la console. Attention: le résultat de la commande n’est cependant pas sauvegardé dans un fichier.

<!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://www.e-xpertsolutions.com/">here</a>.</p>
</body></html>

Suivre les redirection HTTP avec cURL

 

Les codes réponses HTTP “302 found” et “301 moved permanently” sont largement utilisés pour rediriger les utilisateurs sur d’autres pages internet. C’est généralement le cas lorsque l’on souhaite rediriger un utilisateur d’un site web sur sa version sécurisée avec https.

curl -L www.e-xpertsolutions.com

la commande ci-dessus tente une connexion HTTP GET sur le site www.e-xpertsolutions.com, obtient un code réponse 302 found et suit le lien fournit dans l’en-tête HTTP Location. Au final, dans notre cas, cette commande est équivalente à faire une requête directement sur le site https://www.e-xpertsolutions.com/

Afficher les en-têtes HTTP dans la réponse

 

Pour voir le contenu de l’en-tete HTTP Location lors d’une réponse de redirection, nous pouvons entrer la commande suivante:

curl -I www.e-xpertsolutions.com

Dans ce cas, cela change la méthode GET par HEAD. Le résultat de la commande ci-dessus montre clairement l’URL sur laquelle l’utilisateur va être redirigé:

HTTP/1.1 302 Found
Date: Mon, 13 Mar 2017 15:49:27 GMT
Location: https://www.e-xpertsolutions.com/
Content-Type: text/html; charset=iso-8859-1

Ignorer les erreurs de certificat SSL

 

L’outil permet de lancer des requêtes sur des sites en https. Il arrive alors souvent que nous ayons besoin d’ignorer les erreurs de certificats SSL notamment sur des services de test. L’option “-k” permet d’éviter l’affichage de l’erreur suivante :

curl: (60) server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.

La commande suivante permet alors d’afficher le contenu et de s’affranchir de la validation du certificat SSL présenté par le serveur:

curl -k https://www.e-xpertsolutions.com

Pour obtenir plus d’informations sur le certificat présenté par le serveur, vous pouvez ajouter l’option “-v” à votre commande initiale:

curl -kv https://www.e-xpertsolutions.com

Le résultat de la commande ci-dessus permet d’avoir l’état du certificat SSL présenté par le serveur:

* Rebuilt URL to: https://www.e-xpertsolutions.com/
* Trying 212.203.66.76...
* Connected to www.e-xpertsolutions.com (212.203.66.76) port 443 (#0)
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* found 697 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384
* server certificate verification SKIPPED
* server certificate status verification SKIPPED
* common name: *.e-xpertsolutions.com (matched)
* server certificate expiration date OK
* server certificate activation date OK
* certificate public key: RSA
* certificate version: #3
* subject: C=CH,ST=Geneva,L=Plan-les-Ouates,O=e-Xpert Solutions SA,OU=IT,CN=*.e-xpertsolutions.com
* start date: Wed, 11 Feb 2015 00:00:00 GMT
* expire date: Sat, 10 Feb 2018 23:59:59 GMT
* issuer: C=US,O=GeoTrust Inc.,CN=GeoTrust SSL CA - G3
* compression: NULL
* ALPN, server did not agree to a protocol
> GET / HTTP/1.1
> Host: www.e-xpertsolutions.com
> User-Agent: curl/7.47.0
> Accept: */*

Faire un POST HTTP avec cURL

 

Nous avons vu précédemment que l’outil cURL était capable de faire des requêtes GET sur des URLs. La commande est également capable de faire des requêtes POST, PUT, DELETE. Ces méthodes peuvent être spécifiées avec l’option “-X”. L’option “-d” permet, quant à elle, de spécifier le contenu à envoyer dans le POST:

curl -X POST https://www.e-xpertsolutions.com -d local_filename

Par défaut, la commande ci-dessus envoi le contenu de local_filename dans le POST et spécifie un Content-Type “application/x-www-form-urlencoded” dans la requête:

> POST / HTTP/1.1
> Host: www.e-xpertsolutions.com
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Length: 11
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 11 out of 11 bytes

Si l’on souhaite faire un POST sur un formulaire HTTP en spécifiant un username et un mot de passe, il faut par exemple entrer la commande suivante:

curl -X POST https://www.e-xpertsolutions.com -d “username=ydesmarest&password=abc123”

Si maintenant, l’objectif est de faire un POST de contenu JSON vers une API REST, la commande suivante permet d’y arriver:

curl -X POST https://login.e-xpertsolutions.com -d "{\"username\":\"ydesmarest\",\"password\":\"abc123\"}" -H "Content-Type:application/json"

Attention, il est important d’échapper correctement le contenu JSON pour ne pas casser le fonctionnement de la commande. De plus, l’option “-H” permet de spécifier le type de contenu envoyé dans le POST.

Fournir un header Authorization pour authentifier la requête HTTP

 

curl -X GET https://www.e-xpertsolutions.com -u admin:admin

La commande suivante permet d’ajouter un header Authorization avec le contenu “admin:admin” encodé en base64. Cette commande authentifie l’utilisateur si

> GET / HTTP/1.1
> Host: www.e-xpertsolutions.com
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.47.0
> Accept: */*

Laisser un commentaire