AdSense Placeholder
Slot: header_reference_page
curl transfère des données vers et depuis des URL en ligne de commande. Toutes les options ci-dessous existent dans curl 8.18 (curl --help all), et les en-têtes envoyés par chacune ont été vérifiés avec un serveur local qui renvoie la requête reçue. Construisez des commandes visuellement avec le générateur de commandes curl, ou convertissez-en une en Python, JavaScript ou Go avec le convertisseur de curl en code. Les exemples utilisent https://api.example.com.
Méthode et corps de la requête
| Option |
Forme longue |
Rôle |
Exemple |
-X |
--request |
Définit la méthode |
curl -X DELETE https://api.example.com/items/7 |
-d |
--data |
Envoie un corps ; implique POST et Content-Type: application/x-www-form-urlencoded |
curl -d 'a=1&b=2' https://api.example.com/form |
|
--data-raw |
Comme -d, mais un @ initial n'est pas lu comme un nom de fichier |
curl --data-raw '@not-a-file' ... |
|
--data-binary |
Envoie les données telles quelles, en conservant les sauts de ligne |
curl --data-binary @dump.bin ... |
|
--data-urlencode |
Encode la valeur pour une URL |
curl --data-urlencode 'q=a b&c' ... |
|
--json |
Envoie du JSON : POST, Content-Type et Accept: application/json |
curl --json '{"name":"Ana"}' https://api.example.com/users |
-F |
--form |
Formulaire multipart (envoi de fichiers) |
curl -F '[email protected]' -F 'title=Hi' ... |
-G |
--get |
Place les données de -d dans la chaîne de requête et utilise GET |
curl -G -d q=test https://api.example.com/search |
|
--url-query |
Ajoute un paramètre de requête encodé |
curl --url-query 'q=a+b' ... → ?q=a%2bb |
-T |
--upload-file |
Envoie un fichier avec PUT |
curl -T report.pdf https://files.example.com/ |
-I |
--head |
Envoie HEAD : en-têtes uniquement |
curl -I https://example.com |
-d @fichier lit le corps depuis un fichier et supprime les sauts de ligne ; utilisez --data-binary @fichier pour l'envoyer intact. -X POST n'est jamais nécessaire avec -d, --json ou -F.
En-têtes, authentification et cookies
| Option |
Forme longue |
Rôle |
Exemple |
-H |
--header |
Ajoute ou remplace un en-tête (Nom: sans rien après le supprime) |
-H 'Authorization: Bearer TOKEN' |
-A |
--user-agent |
Définit User-Agent |
-A 'MyAgent/1.0' |
-e |
--referer |
Définit Referer |
-e https://example.com/ |
-u |
--user |
Authentification de base (utilisateur:mot de passe) |
-u alice:s3cret |
|
--oauth2-bearer |
Envoie Authorization: Bearer |
--oauth2-bearer TOKEN |
-b |
--cookie |
Envoie des cookies ou les lit depuis un fichier |
-b 'session=abc', -b cookies.txt |
-c |
--cookie-jar |
Enregistre les cookies reçus dans un fichier |
-c cookies.txt |
|
--compressed |
Demande et décompresse gzip, deflate, brotli et zstd |
--compressed |
-n |
--netrc |
Lit les identifiants dans ~/.netrc |
-n |
Réponses et sortie
| Option |
Forme longue |
Rôle |
-i |
--show-headers |
Affiche les en-têtes de la réponse avant le corps (--include est l'ancien nom) |
-D |
--dump-header |
Écrit les en-têtes de la réponse dans un fichier (-D - pour le terminal) |
-o |
--output |
Enregistre le corps dans un fichier |
-O |
--remote-name |
Enregistre sous le nom de fichier de l'URL |
-J |
--remote-header-name |
Avec -O, utilise le nom donné par Content-Disposition |
|
--create-dirs |
Crée les répertoires manquants pour -o |
-C |
--continue-at |
Reprend un téléchargement (-C - détermine le décalage) |
-r |
--range |
Demande seulement une plage d'octets : -r 0-99 |
-s |
--silent |
Pas de compteur de progression ni de messages d'erreur |
-S |
--show-error |
Avec -s, affiche quand même les erreurs |
-f |
--fail |
Quitte avec le code 22 et sans corps sur un HTTP 400 ou plus |
|
--fail-with-body |
Comme -f, mais enregistre quand même le corps |
-w |
--write-out |
Affiche des variables après le transfert |
-# |
--progress-bar |
Barre de progression simple à la place du compteur habituel |
Redirections, nouvelles tentatives et délais
| Option |
Forme longue |
Rôle |
-L |
--location |
Suit les redirections |
|
--max-redirs |
Limite le nombre de redirections suivies |
-m |
--max-time |
Durée totale maximale en secondes |
|
--connect-timeout |
Durée maximale de connexion |
|
--retry |
Réessaie N fois en cas d'échec transitoire |
|
--retry-delay |
Secondes entre deux tentatives |
|
--retry-all-errors |
Réessaie après toute erreur, pas seulement les transitoires |
|
--limit-rate |
Plafonne le débit : --limit-rate 500K |
-Z |
--parallel |
Traite plusieurs URL en même temps |
Voyez chaque étape d'une chaîne de redirections, avec ses codes d'état, dans le traceur de chaîne de redirections HTTP.
Connexion, TLS et proxys
| Option |
Forme longue |
Rôle |
-k |
--insecure |
Ignore la vérification du certificat (tests uniquement) |
|
--cacert |
Fait confiance à un lot d'AC précis |
|
--cert / --key |
Certificat et clé client (TLS mutuel) |
|
--tlsv1.2 |
Exige au moins TLS 1.2 (--tls-max fixe le plafond) |
|
--http1.1 / --http2 / --http3 |
Choisit la version de HTTP |
-4 / -6 |
--ipv4 / --ipv6 |
Résout les noms en IPv4 ou en IPv6 uniquement |
|
--resolve |
Associe un hôte à une IP : --resolve example.com:443:192.0.2.10 |
|
--connect-to |
Envoie la requête à un autre hôte et port |
-x |
--proxy |
Utilise un proxy : -x http://proxy.example.com:3128 |
|
--noproxy |
Hôtes qui contournent le proxy |
|
--unix-socket |
Se connecte via un socket Unix (API Docker) |
Débogage et mesure des durées
| Option |
Forme longue |
Rôle |
-v |
--verbose |
Affiche les en-têtes de requête et de réponse ainsi que la négociation TLS |
|
--trace-ascii |
Journalise dans un fichier tout ce qui est envoyé et reçu |
|
--trace-time |
Ajoute des horodatages à la sortie détaillée et aux traces |
-K |
--config |
Lit les options depuis un fichier |
Variables utiles pour -w : %{http_code}, %{time_namelookup}, %{time_connect}, %{time_starttransfer}, %{time_total}, %{size_download}, %{url_effective}, %{remote_ip}.
Recettes
| Tâche |
Commande |
| Code d'état uniquement |
curl -s -o /dev/null -w '%{http_code}\n' https://example.com |
| Décomposition des durées |
curl -s -o /dev/null -w 'dns %{time_namelookup} connect %{time_connect} ttfb %{time_starttransfer} total %{time_total}\n' https://example.com |
| En-têtes seuls, en suivant les redirections |
curl -sIL https://example.com |
| POST de JSON avec un jeton |
curl --json '{"q":"test"}' -H 'Authorization: Bearer TOKEN' https://api.example.com/search |
| Télécharger en reprenant si interrompu |
curl -L -C - -O https://example.com/file.iso |
| Tester un serveur avant de changer le DNS |
curl --resolve example.com:443:203.0.113.10 https://example.com |
| Faire échouer un script sur une erreur HTTP |
curl -fsS https://api.example.com/health |
Mettez entre guillemets, dans le shell, les URL qui contiennent & ou ?, et encodez en pourcentage les caractères spéciaux des valeurs de requête avec l'encodeur d'URL. Pour contrôler les en-têtes d'un site sans terminal, utilisez le visualiseur d'en-têtes HTTP.