10 Utilisation de la commande cURL avec un exemple en temps réel



cURL est un outil en ligne de commande permettant de récupérer ou de transmettre des informations en utilisant une syntaxe d’URL.

Tout professionnel travaillant dans le développement ou le support technique devrait maîtriser l’utilisation de la commande cURL pour diagnostiquer les problèmes liés aux applications web. cURL est un outil polyvalent compatible avec Windows, macOS et les systèmes UNIX.

Voici quelques exemples des syntaxes les plus utilisées pour vous aider à mieux comprendre son fonctionnement.

Vérification de la connexion à une URL

Si vous utilisez un système UNIX et que vous cherchez à accéder à une URL externe, la première étape consiste à vérifier si vous pouvez l’atteindre en utilisant la commande curl.

curl votreurl.com

Cette commande ne produira aucun résultat visible si la connexion réussit. Cependant, si le serveur est inaccessible, vous recevrez des messages d’erreur, tels que « Impossible de résoudre l’hôte ».

[[email protected] tmp]# curl helloitdoesntexist.com
curl: (6) Could not resolve host: helloitdoesntexist.com; Unknown error
[[email protected] tmp]#

Enregistrement de la sortie d’une URL/URI dans un fichier

Pour sauvegarder le contenu d’une URL ou d’une URI dans un fichier spécifique, utilisez la syntaxe suivante :

curl https://yoururl.com > votreurl.html

Exemple :

[[email protected] tmp]# curl https://gf.dev > /tmp/gfhtml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 18557    0 18557    0     0  72565      0 --:--:-- --:--:-- --:--:-- 72772
[[email protected] tmp]#

Cet exemple enregistrera l’intégralité du contenu de gf.dev dans le fichier /tmp/gf.html.

Affichage des en-têtes de requête et de réponse

Si vous rencontrez des problèmes et que vous souhaitez analyser les en-têtes de requête et de réponse, utilisez la commande suivante :

curl -v votreurl.com

Exemple:

[[email protected] tmp]# curl -v https://toptips.fr.com
* About to connect() to toptips.fr.com port 443 (#0)
*   Trying 104.25.134.107...
* Connected to toptips.fr.com (104.25.134.107) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* 	subject: CN=ssl371609.cloudflaressl.com,OU=PositiveSSL Multi-Domain,OU=Domain Control Validated
* 	start date: Nov 07 00:00:00 2019 GMT
* 	expire date: May 15 23:59:59 2020 GMT
* 	common name: ssl371609.cloudflaressl.com
* 	issuer: CN=COMODO ECC Domain Validation Secure Server CA 2,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: toptips.fr.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Sat, 09 Nov 2019 19:41:37 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Set-Cookie: __cfduid=d2ce6cd359ebc0b6eb5ff3a454ed042021573328497; expires=Sun, 08-Nov-20 19:41:37 GMT; path=/; domain=.toptips.fr.com; HttpOnly; Secure
< Vary: Accept-Encoding
< Link: <https://toptips.fr.com/wp-json/>; rel="https://api.w.org/"
< Link: <https://toptips.fr.com/>; rel=shortlink
< X-SRCache-Fetch-Status: HIT
< X-SRCache-Store-Status: BYPASS
< X-Frame-Options: SAMEORIGIN
< X-Powered-By: EasyEngine v4.0.12
< Via: 1.1 google
< CF-Cache-Status: DYNAMIC
< Strict-Transport-Security: max-age=15552000; preload
< X-Content-Type-Options: nosniff
< Alt-Svc: h3-23=":443"; ma=86400
< Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
< Server: cloudflare
< CF-RAY: 533243e4bcd4bbf4-LHR
<

Téléchargement avec une limite de débit

Si vous testez l’optimisation de téléchargement et que vous voulez observer le temps que prend un téléchargement à une vitesse spécifique, utilisez :

curl --limit-rate 2000B

Exemple :

curl --limit-rate 2000B https://gf.dev

Utilisation d’un proxy pour la connexion

Cette fonctionnalité est très utile lorsque vous travaillez sur un serveur DMZ et que vous devez accéder à des ressources externes via un proxy.

curl --proxy votrerproxy:port https://votreurl.com

Vous pouvez également personnaliser la requête curl en ajoutant des en-têtes pour des tests ou des diagnostics spécifiques. Par exemple, pour définir le Content-Type :

curl --header 'Content-Type: application/json' http://votreurl.com

Cette commande envoie l’en-tête Content-Type avec la valeur application/json.

Si vous souhaitez examiner rapidement l’en-tête de réponse, vous pouvez utiliser la syntaxe suivante :

curl --head http://votreurl.com

Exemple :

[[email protected] tmp]# curl --head https://chandan.io
HTTP/1.1 200 OK
Date: Sat, 09 Nov 2019 19:51:23 GMT
Content-Type: text/html
Connection: keep-alive
Set-Cookie: __cfduid=d3cb2c7b8e566ad99c870b0af12b0f1eb1573329083; expires=Sun, 08-Nov-20 19:51:23 GMT; path=/; domain=.chandan.io; HttpOnly
X-GUploader-UploadID: AEnB2Uo96JhvJmR2zYUL-Ndh2ta3UD_ykQAB5C7O8cjZQhCf-GxHQ0MsodSzRnl3guSN3ywAYNjtWcPXfwDXjLg3bQ-P5vQMOA
Expires: Sat, 09 Nov 2019 20:51:23 GMT
Cache-Control: public, max-age=3600
Last-Modified: Mon, 06 Aug 2018 10:45:47 GMT
x-goog-generation: 1533552347482034
x-goog-metageneration: 1
x-goog-stored-content-encoding: identity
x-goog-stored-content-length: 24620
x-goog-hash: crc32c=DpDPAQ==
x-goog-hash: md5=cIP/3rusdUx12Zla1kf1yA==
x-goog-storage-class: MULTI_REGIONAL
Accept-Ranges: bytes
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: 53325234dc2fbb9a-LHR

[[email protected] tmp]#

Connexion à une URL HTTPS/SSL en ignorant les erreurs de certificat

Lorsque vous tentez d’accéder à une URL sécurisée avec un certificat SSL/TLS incorrect ou une erreur de nom commun, vous obtenez une erreur de ce type :

curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.

Heureusement, vous pouvez demander à curl d’ignorer les erreurs de certificat en utilisant l’option `–insecure` :

curl --insecure https://votreurl.com

Connexion avec un protocole spécifique (SSL/TLS)

Cette fonctionnalité est utile pour tester si une URL peut établir une connexion via un protocole SSL/TLS spécifique.

Pour se connecter avec SSL v3 :

curl --sslv3 https://votreurl.com

Et pour différentes versions de TLS :

curl --tlsv1 https://example.com
curl --tlsv1.0 https://example.com
curl --tlsv1.1 https://example.com
curl --tlsv1.2 https://example.com
curl --tlsv1.3 https://example.com

Téléchargement d’un fichier à partir d’un serveur FTP

Vous pouvez également utiliser curl pour télécharger un fichier à partir d’un serveur FTP en spécifiant votre nom d’utilisateur et votre mot de passe.

curl -u user:password -O ftp://ftpurl/style.css

N’oubliez pas que vous pouvez toujours utiliser l’option `-v` avec n’importe quelle commande pour afficher plus de détails.

L’en-tête Host est utile lorsque vous testez une URL cible via son adresse IP, en particulier si le contenu n’est disponible qu’avec l’en-tête Host correct. Ou, lorsque vous souhaitez tester une application via l’adresse IP/URL d’un équilibreur de charge.

curl --header 'Host: targetapplication.com' https://192.0.0.1:8080/

L’utilisation de cURL en ligne

Oui, c’est tout à fait possible grâce aux outils suivants. Vous pouvez exécuter cURL à distance.

CURL en ligne – un outil simple pour récupérer une URL en ligne, avec la possibilité d’ajouter les options suivantes :

--connect-timeout
--cookie
--data
--header
--head
--location
--max-time
--proxy
--request
--user
--url
--user-agent
 

Générateur de ligne de commande cURL – Cet outil vous aide à créer la commande curl en entrant vos informations dans une interface utilisateur intuitive. La commande cURL est ensuite générée en bas de l’écran.

cURL est un outil extrêmement utile pour diagnostiquer les problèmes de connectivité en temps réel. J’espère que les informations ci-dessus vous seront utiles. Si vous désirez approfondir vos connaissances, je vous recommande le cours en ligne Principes de base de la ligne de commande Linux.