Utilisation de base
Requêtes simples
curl https://example.com # requête GET curl -o file.html https://url # sauvegarder dans un fichier curl -O https://url/file.tar.gz # sauvegarder avec le nom distant curl -L https://url # suivre les redirections
Options courantes
-sMode silencieux (sans progression)
-SAfficher les erreurs en mode silencieux
-fÉchouer silencieusement sur les erreurs HTTP
-LSuivre les redirections
-o fileÉcrire la sortie dans un fichier
-OSauvegarder avec le nom du fichier distant
-C -Reprendre un téléchargement interrompu
--max-time 30Expiration après 30 secondes
Méthodes HTTP
GET et HEAD
curl https://api.example.com/users curl -I https://example.com # HEAD (en-têtes seulement) curl -i https://example.com # inclure les en-têtes de réponse
POST
curl -X POST https://api.example.com/users \ -H "Content-Type: application/json" \ -d '{"name":"Jo","email":"[email protected]"}'
PUT, PATCH et DELETE
curl -X PUT https://api.example.com/users/1 \ -d '{"name":"Updated"}' curl -X PATCH https://api.example.com/users/1 \ -d '{"email":"[email protected]"}' curl -X DELETE https://api.example.com/users/1
En-têtes
Définir des en-têtes
curl -H "Content-Type: application/json" URL curl -H "Accept: text/html" URL curl -H "X-Custom: value" URL curl -H "Header1: v1" -H "Header2: v2" URL
En-têtes de réponse
-iInclure les en-têtes de réponse dans la sortie
-IRécupérer les en-têtes seulement (HEAD)
-D fileVider les en-têtes de réponse dans un fichier
-w '%{http_code}'Afficher le code de statut HTTP
Authentification
Auth basique et par token
curl -u user:pass https://api.example.com curl -H "Authorization: Bearer TOKEN" URL curl -u user:pass --digest URL curl --negotiate -u : URL # Kerberos/SPNEGO
Méthodes d'authentification
-u user:passAuthentification basique
--digestAuth HTTP Digest
--negotiateAuth Kerberos/SPNEGO
--ntlmAuthentification NTLM
-nUtiliser les identifiants ~/.netrc
Données et formulaires
Envoyer des données
curl -d "key=val&key2=val2" URL # form urlencoded curl -d @data.json URL # données depuis un fichier curl --data-raw '{"raw":"json"}' URL curl --data-urlencode "q=hello world" URL
Téléversement de fichiers
curl -F "[email protected]" URL curl -F "[email protected];type=application/pdf" URL curl -F "field=value" -F "[email protected]" URL
Multipart vs URL-Encoded
-dapplication/x-www-form-urlencoded
-Fmultipart/form-data
--jsonRaccourci : définit Content-Type + Accept à JSON
-T fileTéléverser un fichier via PUT
SSL/TLS
Options de certificat
curl --cacert ca.pem URL # bundle CA personnalisé curl --cert client.pem URL # certificat client curl --cert client.pem --key key.pem URL curl -k URL # ignorer la vérification TLS (dev uniquement)
Options TLS
-k / --insecureIgnorer la vérification du certificat TLS
--cacert fileUtiliser un certificat CA personnalisé
--cert fileCertificat client
--key fileClé privée client
--tlsv1.2Forcer TLS 1.2 minimum
--tlsv1.3Forcer TLS 1.3 minimum
Sortie et débogage
Mode verbeux et trace
curl -v URL # sortie verbeuse curl --trace dump.txt URL # trace complète dans un fichier curl --trace-ascii - URL # trace sur stdout curl -w "\n%{http_code}\n" URL # format de sortie personnalisé
Variables write-out
%{http_code}Code de statut HTTP
%{time_total}Temps total en secondes
%{time_connect}Temps pour établir la connexion
%{size_download}Octets téléchargés
%{speed_download}Vitesse de téléchargement moyenne
%{redirect_url}URL de redirection (si applicable)
%{ssl_verify_result}Résultat de la vérification SSL (0 = OK)
Exemple write-out
curl -s -o /dev/null -w \ "code: %{http_code}\ntime: %{time_total}s\n" \ https://example.com
Patterns courants
Workflow API
# Obtenir du JSON et envoyer vers jq curl -s https://api.example.com/data | jq '.items[]' # POST JSON avec auth curl -s -H "Authorization: Bearer $TOKEN" \ --json '{"key":"val"}' https://api.example.com
Patterns de téléchargement
# Télécharger avec barre de progression curl -# -O https://releases.example.com/v2.tar.gz # Reprendre un téléchargement interrompu curl -C - -O https://releases.example.com/v2.tar.gz # Télécharger plusieurs fichiers curl -O https://url/file1 -O https://url/file2
Aides pour les scripts
# Vérifier si une URL est accessible curl -sf -o /dev/null https://example.com && echo OK # Sauvegarder et réutiliser les cookies curl -c cookies.txt -b cookies.txt URL # Limiter le débit de la requête curl --limit-rate 100k URL
Proxy et réseau
Paramètres proxy
curl -x http://proxy:8080 URL curl -x socks5://proxy:1080 URL curl --proxy-user user:pass -x http://proxy:8080 URL curl --noproxy "*.local,localhost" URL
DNS et résolution
--resolve host:port:addrForcer la résolution DNS vers addr
--dns-servers 8.8.8.8Utiliser un serveur DNS personnalisé
--interface eth0Utiliser une interface réseau spécifique
-4 / -6Forcer IPv4 / IPv6
Config et avancé
Fichiers de config
# ~/.curlrc — options par défaut --silent --location --max-time 30 # Utiliser un fichier de config explicitement curl -K myconfig.txt URL
Options utiles
--retry 3Réessayer en cas d'erreurs transitoires
--retry-delay 2Délai entre les tentatives (secondes)
--compressedDemander et décompresser gzip/br
--limit-rate 100kLimiter la vitesse de transfert
-ZTransferts parallèles (curl 7.66+)
--create-dirsCréer les répertoires du chemin pour -o