02- Curl

curl (pour Client URL) est un outil en ligne de commande permettant de faire des requêtes HTTP(S), FTP, SMB, etc. Il est extrêmement utilisé pour tester des API, automatiser des requêtes web, ou encore transférer des fichiers.

Créé par Daniel Stenberg en 1997 (loué soit son nom), curl est un projet open-source maintenu activement depuis plus de 25 ans. Il est préinstallé sur la plupart des systèmes Unix/Linux et même disponible sur l’OS de Redmond.

Pour en savoir plus sur son créateur, on vous invite à consulter le blog de Daniel Stenberg.

Commande Description

curl http://example.com Effectuer une requête GET simple  
curl -L http://example.com  Suivre les redirections  
curl -I http://example.com  Afficher uniquement les headers  
curl -X POST http://example.com Effectuer une requête POST  
curl -X PUT http://example.com  Effectuer une requête PUT  
curl -d "param=val" http://...  Envoyer des données en POST (formulaire)  
curl -H "Header: value" Ajouter un en-tête HTTP personnalisé  
curl -u user:pass http://...    Authentification HTTP Basic  
curl -b cookies.txt http://...  Envoyer des cookies depuis un fichier  
curl -c cookies.txt http://...  Sauvegarder les cookies reçus  
curl -F "file=@path" http://... Upload de fichier (multipart/form-data)  
curl -o fichier.html http://... Sauvegarder la sortie dans un fichier  
curl -O http://site/fichier.zip Télécharger un fichier (conserve le nom d’origine)  
curl -s http://...  Mode silencieux (pas de barre de progression)  
curl -v http://...  Mode verbeux (affiche les détails de la requête)  
curl --http2 http://... Forcer l’utilisation de HTTP/2  
curl --compressed http://...    Demander une réponse compressée (gzip, deflate)  
curl --resolve host:port:IP http://...  Résolution DNS personnalisée (utile pour tester avant changement de DNS)  
curl -k https://... Ignorer les erreurs de certificat SSL (⚠️ à éviter en prod !)  
curl -x proxy:port http://...   Utiliser un proxy  

Exemples d’utilisation de curl

Tester une API REST

curl -X GET https://api.github.com/users/octocat

Envoyer des données en POST

curl -X POST https://reqres.in/api/users \
     -H "Content-Type: application/json" \
     -d '{"name":"Jean","job":"DevOps"}'

Authentification avec token Bearer

curl -H "Authorization: Bearer <token>" https://api.example.com/data

Télécharger un fichier

curl -O https://example.com/fichier.zip

Tester un site avec une IP spécifique (bypass DNS)

curl --resolve example.com:443:192.0.2.123 https://example.com

Upload d’un fichier

curl -F "file=@rapport.pdf" https://upload.example.com

Envoi et réception de cookies

curl -c cookies.txt -b cookies.txt https://example.com

Voir uniquement les en-têtes HTTP

curl -I https://example.com

Suivre les redirections

curl -L https://short.url/vers/longue

Affichage détaillé (debug)

curl -v https://example.com

Mode silencieux (sans sortie)

curl -s https://example.com > /dev/null

Exemples avancés : Requêtes POST

1. POST simple avec JSON et analyse avec jq

curl -s -X POST https://reqres.in/api/users \
  -H "Content-Type: application/json" \
  -d '{"name": "Jean", "job": "DevOps"}' \
  | jq .

Explication :

  • -s : mode silencieux
  • -X POST : méthode HTTP POST
  • -H : définit un en-tête, ici Content-Type: application/json
  • -d : données à envoyer au format JSON
  • | jq . : formatage de la réponse JSON pour la lisibilité

Réponse typique :

{
  "name": "Jean",
  "job": "DevOps",
  "id": "123",
  "createdAt": "2025-04-19T12:34:56.789Z"
}

2. POST avec authentification et token Bearer

curl -s -X POST https://api.example.com/data \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"param1": "value1", "param2": "value2"}' \
  | jq '.status, .message'

Explication :

  • Ajoute un header d’authentification : Authorization: Bearer
  • Affiche uniquement certains champs de la réponse avec jq

3\ POST multipart (envoi de fichier + champ texte)

curl -s -X POST https://api.example.com/upload \
  -F "description=rapport de test" \
  -F "file=@rapport.pdf" \
  | jq .

Explication :

  • -F permet d’envoyer une requête multipart/form-data
  • file=@rapport.pdf attache un fichier

4\ POST avec réponse enregistrée dans un fichier

curl -X POST https://reqres.in/api/users \
  -H "Content-Type: application/json" \
  -d '{"name":"Alice","job":"Admin"}' \
  -o response.json

Explication :

  • -o response.json enregistre la sortie dans un fichier

Pour lire la réponse :

RESPONSE=$(curl -s -X POST https://reqres.in/api/users \
  -H "Content-Type: application/json" \
  -d '{"name":"Bob","job":"Manager"}')

ID=$(echo "$RESPONSE" | jq -r '.id')
CREATED=$(echo "$RESPONSE" | jq -r '.createdAt')

echo "Utilisateur créé avec ID $ID à $CREATED"

Explication :

  • On stocke la réponse dans une variable Bash
  • Extraction de champs avec jq -r pour une sortie brute
  • Impression d’un message lisible en shell

Dernière édition le 2025-07-01 01:14

Propulsé par Wiki|Docs

This page was last edited on 2025-07-01 01:14

Jules
Free licence

Propulsé par Wiki|Docs