Commandes Linux pour faire des requêtes HTTP, tester des APIs REST et manipuler du JSON.
Sujets associés : API — Vue d’ensemble, API REST, HTTP — Méthodes, Codes et Headers, Requêtes HTTP et HTTPS
curl — couteau suisse HTTP
Requêtes de base
# GET simple
curl https://api.exemple.com/users
# GET avec affichage des headers de réponse
curl -i https://api.exemple.com/users # headers + body
curl -I https://api.exemple.com/users # headers seulement (HEAD)
curl -v https://api.exemple.com/users # mode verbeux (tout)
# Suivre les redirections
curl -L https://exemple.com
# Sauvegarder la réponse dans un fichier
curl -o sortie.json https://api.exemple.com/users
curl -O https://exemple.com/fichier.zip # nom du fichier distant
# Limiter le temps de connexion et de transfert
curl --connect-timeout 5 --max-time 30 https://api.exemple.comMéthodes HTTP
# POST avec JSON
curl -X POST https://api.exemple.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "email": "alice@exemple.com"}'
# POST avec fichier JSON
curl -X POST https://api.exemple.com/users \
-H "Content-Type: application/json" \
-d @payload.json
# PUT (mise à jour complète)
curl -X PUT https://api.exemple.com/users/42 \
-H "Content-Type: application/json" \
-d '{"name": "Alice Updated"}'
# PATCH (mise à jour partielle)
curl -X PATCH https://api.exemple.com/users/42 \
-H "Content-Type: application/json" \
-d '{"name": "Alice"}'
# DELETE
curl -X DELETE https://api.exemple.com/users/42
# OPTIONS (CORS preflight)
curl -X OPTIONS https://api.exemple.com/users \
-H "Origin: https://frontend.exemple.com" \
-H "Access-Control-Request-Method: POST"Headers et authentification
# Ajouter des headers personnalisés
curl -H "X-API-Key: mon-token" \
-H "Accept: application/json" \
https://api.exemple.com/data
# Authentification Bearer (JWT / OAuth2)
curl -H "Authorization: Bearer eyJhbGci..." https://api.exemple.com/me
# Authentification Basic
curl -u utilisateur:motdepasse https://api.exemple.com/
curl -H "Authorization: Basic $(echo -n 'user:pass' | base64)" https://api.exemple.com/
# Cookie
curl -b "session=abc123" https://api.exemple.com/
curl -c cookies.txt -b cookies.txt https://api.exemple.com/login # sauvegarder + envoyer
# API Key en query param
curl "https://api.exemple.com/data?api_key=montoken"TLS et certificats
# Ignorer les erreurs de certificat (dev uniquement !)
curl -k https://self-signed.exemple.com
curl --insecure https://self-signed.exemple.com
# Spécifier un CA bundle
curl --cacert /etc/ssl/certs/ca-bundle.crt https://api.exemple.com
# Client mTLS (certificat client)
curl --cert client.crt --key client.key \
--cacert ca.crt \
https://api.exemple.com/
# Afficher les détails du certificat TLS
curl -v --head https://api.exemple.com 2>&1 | grep -A 20 "Server certificate"Proxy
# Via un proxy HTTP
curl -x http://proxy:3128 https://api.exemple.com/
# Via un proxy SOCKS5
curl --socks5 proxy:1080 https://api.exemple.com/
# Exclure certains domaines du proxy
curl --noproxy "localhost,192.168.1.0/24" -x http://proxy:3128 https://api.exemple.com/Formatage et débogage
# Formater la sortie avec le code HTTP seulement
curl -s -o /dev/null -w "%{http_code}" https://api.exemple.com/health
# Obtenir plusieurs infos de timing
curl -s -o /dev/null -w "
DNS: %{time_namelookup}s
Connexion: %{time_connect}s
TLS: %{time_appconnect}s
TTFB: %{time_starttransfer}s
Total: %{time_total}s
Code HTTP: %{http_code}
" https://api.exemple.com/
# Envoyer du JSON et récupérer JSON (en une ligne avec jq)
curl -s -X POST https://api.exemple.com/users \
-H "Content-Type: application/json" \
-d '{"name":"Alice"}' | jq .
# Passer par un proxy et capturer la réponse
curl -v https://api.exemple.com 2>&1 | tee debug.txtwget — téléchargement de fichiers
# Télécharger un fichier
wget https://exemple.com/fichier.zip
# Télécharger en arrière-plan
wget -b https://exemple.com/gros-fichier.iso
# Reprendre un téléchargement interrompu
wget -c https://exemple.com/gros-fichier.iso
# Télécharger plusieurs fichiers (liste dans un fichier)
wget -i liste-urls.txt
# Miroir d'un site
wget --mirror --convert-links --page-requisites https://exemple.com/
# Télécharger via proxy
wget -e "https_proxy=http://proxy:3128" https://exemple.com/fichier
# Nom de fichier personnalisé
wget -O mon-fichier.html https://exemple.com/pagejq — manipulation de JSON en ligne de commande
# Formater du JSON brut
echo '{"name":"Alice","age":30}' | jq .
# Accéder à un champ
curl -s https://api.exemple.com/users/1 | jq .name
curl -s https://api.exemple.com/users/1 | jq '.address.city'
# Accéder à un élément de tableau
curl -s https://api.exemple.com/users | jq '.[0]'
curl -s https://api.exemple.com/users | jq '.[0].name'
# Itérer sur un tableau
curl -s https://api.exemple.com/users | jq '.[] | .name'
# Filtrer avec condition
curl -s https://api.exemple.com/users | jq '.[] | select(.age > 25)'
# Construire un nouvel objet
curl -s https://api.exemple.com/users | jq '.[] | {id: .id, email: .email}'
# Extraire un tableau de valeurs
curl -s https://api.exemple.com/users | jq '[.[] | .name]'
# Compter les éléments
curl -s https://api.exemple.com/users | jq 'length'
# Extraire avec clé dynamique
curl -s https://api.exemple.com/config | jq '.["env-prod"].host'
# Pipe jq dans un script
TOKEN=$(curl -s -X POST https://api.exemple.com/login \
-d '{"user":"alice","pass":"secret"}' | jq -r .token)
curl -H "Authorization: Bearer $TOKEN" https://api.exemple.com/meRecettes complètes
# Tester une API avec authentification et voir le code HTTP
STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
https://api.exemple.com/health)
echo "Status: $STATUS"
# Appel en boucle avec retry
for i in {1..5}; do
STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://api.exemple.com/health)
[ "$STATUS" = "200" ] && echo "OK" && break
echo "Tentative $i: status=$STATUS"
sleep 2
done
# Tester CORS depuis la ligne de commande
curl -s -X OPTIONS https://api.exemple.com/resource \
-H "Origin: https://app.exemple.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: Content-Type, Authorization" \
-v 2>&1 | grep "< Access-Control"
# Upload d'un fichier (multipart)
curl -X POST https://api.exemple.com/upload \
-F "file=@/chemin/vers/fichier.pdf" \
-F "description=Mon document"En relation avec
- Linux Réseau — Vue d’ensemble — index des commandes réseau Linux
- TLS et Certificats — Commandes — openssl pour inspecter les connexions HTTPS
- Proxy — Commandes — utiliser curl via un proxy
- HTTP — Méthodes, Codes et Headers — référence des méthodes et codes
- Authentification API — JWT, OAuth2, API Key