Comment télécharger des fichiers avec curl

curl est l'un des outils en ligne de commande les plus polyvalents pour télécharger des fichiers via HTTP, HTTPS, FTP et des dizaines d'autres protocoles. Que vous ayez besoin d'enregistrer une réponse API dans un fichier ou d'automatiser des téléchargements par lots dans un script shell, curl a une option pour cela. Ce guide couvre toutes les options liées au téléchargement — de l'enregistrement basique avec -o et -O à la reprise des transferts interrompus avec -C -, la limitation de bande passante avec --limit-rate et l'affichage de barres de progression. Chaque option inclut une explication claire, les cas d'utilisation courants et un exemple prêt à copier.

Référence rapide des options de téléchargement

-o

Écrire la sortie dans un fichier nommé au lieu de stdout

-O

Écrire la sortie dans un fichier portant le nom du fichier distant

-L

Suivre automatiquement les redirections HTTP 3xx

-C -

Continuer/reprendre un transfert de fichier précédent

--limit-rate

Limiter la vitesse de transfert au débit donné

--max-filesize

Refuser de télécharger les fichiers dépassant la taille spécifiée

-J

Utiliser l'en-tête Content-Disposition pour nommer le fichier

-#

Afficher la progression du transfert sous forme de barre simple

-u

Fournir nom_utilisateur:mot_de_passe pour l'authentification serveur

--retry

Réessayer le transfert en cas d'erreurs transitoires (nombre de fois)

--retry-delay

Attendre ce nombre de secondes entre les tentatives

-T

Envoyer un fichier local vers une URL (PUT par défaut)

--create-dirs

Créer les répertoires locaux nécessaires lors de l'enregistrement

-s

Supprimer le compteur de progression et les messages d'erreur

--output-dir

Enregistrer le(s) fichier(s) de sortie dans le répertoire spécifié (curl 7.73+)

curl -o : Enregistrer avec un nom de fichier spécifique

Fonctionnement
L'option -o (ou --output) indique à curl d'enregistrer le corps de la réponse dans un fichier que vous spécifiez. Sans cette option, curl affiche la réponse sur stdout (votre terminal). Vous pouvez utiliser n'importe quel nom de fichier et chemin — curl créera le fichier ou écrasera un fichier existant.
Utilisation courante
Utilisez -o lorsque vous devez contrôler le nom exact du fichier ou enregistrer dans un répertoire spécifique. Fonctionne avec tous les protocoles — HTTP, HTTPS, FTP, SFTP et plus encore. Combinez avec -L pour gérer les redirections et -s pour un fonctionnement silencieux dans les scripts.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -O : Enregistrer avec le nom du fichier distant

Fonctionnement
L'option -O (ou --remote-name) enregistre le fichier téléchargé en utilisant le nom extrait de l'URL. Par exemple, si l'URL se termine par /data.csv, curl crée un fichier appelé data.csv dans le répertoire courant.
Utilisation courante
Utilisez -O lorsque le nom du fichier distant est significatif et que vous n'avez pas besoin de le renommer. Vous pouvez passer plusieurs options -O pour télécharger plusieurs fichiers en une seule commande. Remarque : si l'URL ne contient pas de nom de fichier (par ex., se termine par /), curl échouera — utilisez -o à la place.
$ curl -O https://example.com/files/data.csv

curl -L : Suivre les redirections

Fonctionnement
L'option -L (ou --location) fait que curl suit automatiquement les redirections HTTP — 301 (Moved Permanently), 302 (Found), 307 et 308. Sans -L, curl retourne la réponse de redirection elle-même au lieu du contenu réel.
Utilisation courante
La plupart des URL de téléchargement redirigent au moins une fois (par ex., de HTTP vers HTTPS, ou d'une URL courte vers le fichier réel). Combinez toujours -L avec -o ou -O lors du téléchargement de fichiers. Par défaut, curl suit jusqu'à 50 redirections ; modifiez cela avec --max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gz

curl -C - : Reprendre les téléchargements interrompus

Fonctionnement
L'option -C - (ou --continue-at -) indique à curl de détecter automatiquement la taille du fichier partiel existant et de reprendre le téléchargement là où il s'est arrêté. Le serveur doit supporter l'en-tête HTTP Range pour que cela fonctionne.
Utilisation courante
Si un téléchargement volumineux a été interrompu par un problème réseau ou un timeout, relancez simplement la même commande avec -C - ajouté. curl enverra un en-tête Range: bytes=OFFSET- et ne téléchargera que les données restantes. C'est essentiel pour les fichiers volumineux sur des connexions instables.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate : Limiter la vitesse de téléchargement

Fonctionnement
L'option --limit-rate plafonne la vitesse de téléchargement (et d'envoi) au débit spécifié. Elle accepte les suffixes : k ou K pour les kilooctets/s, m ou M pour les mégaoctets/s, g ou G pour les gigaoctets/s.
Utilisation courante
Utilisez --limit-rate pour éviter de saturer votre bande passante lors du téléchargement de fichiers volumineux, surtout sur des connexions partagées. C'est aussi utile pour tester comment votre application gère les réponses lentes.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize : Abandonner si le fichier est trop volumineux

Fonctionnement
L'option --max-filesize indique à curl d'abandonner le transfert si la taille attendue du fichier (d'après l'en-tête Content-Length) dépasse la limite spécifiée. La taille peut utiliser des suffixes comme k, M, G.
Utilisation courante
Utilisez dans les scripts pour empêcher les téléchargements anormalement volumineux de consommer l'espace disque. Notez que tous les serveurs n'envoient pas Content-Length — dans ce cas, curl ne peut pas appliquer cette limite et le téléchargement se poursuit normalement.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J : Utiliser le nom de fichier suggéré par le serveur

Fonctionnement
L'option -J (ou --remote-header-name) indique à curl d'utiliser le nom de fichier spécifié dans l'en-tête Content-Disposition du serveur au lieu de le dériver de l'URL. C'est courant pour les API de téléchargement qui retournent des fichiers avec des noms significatifs.
Utilisation courante
Combinez toujours -J avec -O. C'est utile lorsque l'URL est un point de terminaison API (comme /export?format=csv) mais que le serveur retourne un nom de fichier approprié dans les en-têtes. Note de sécurité : le serveur contrôle le nom du fichier, utilisez uniquement avec des serveurs de confiance.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -# : Afficher une barre de progression

Fonctionnement
L'option -# (ou --progress-bar) remplace le compteur de progression détaillé par défaut par une simple barre de progression ###. C'est plus facile à lire pour une utilisation interactive.
Utilisation courante
Utilisez -# lors de téléchargements interactifs quand vous voulez un indicateur de progression propre. Pour les scripts, préférez -s (silencieux) ou le compteur de progression par défaut. La sortie par défaut de curl affiche déjà la vitesse, le pourcentage, le temps restant et la taille totale.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

Options de téléchargement supplémentaires

-u

Fournir nom_utilisateur:mot_de_passe pour l'authentification serveur

--retry

Réessayer le transfert en cas d'erreurs transitoires (nombre de fois)

--retry-delay

Attendre ce nombre de secondes entre les tentatives

-T

Envoyer un fichier local vers une URL (PUT par défaut)

--create-dirs

Créer les répertoires locaux nécessaires lors de l'enregistrement

-s

Supprimer le compteur de progression et les messages d'erreur

--output-dir

Enregistrer le(s) fichier(s) de sortie dans le répertoire spécifié (curl 7.73+)

Scénarios de téléchargement réels

Ces exemples combinent plusieurs options pour gérer les tâches de téléchargement courantes que vous rencontrerez dans le développement et le scripting au quotidien.

Télécharger plusieurs fichiers à la fois

Utilisez plusieurs options -O pour télécharger plusieurs fichiers en une seule commande. curl les traite séquentiellement. Pour des téléchargements parallèles, utilisez xargs ou GNU parallel.

$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txt

Télécharger depuis un serveur FTP

curl supporte nativement FTP, FTPS et SFTP. Ajoutez -u user:password pour un accès authentifié. Utilisez -O pour conserver le nom du fichier distant.

$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sql

Télécharger avec authentification

Utilisez -u user:pass pour Basic Auth, ou -H pour passer un token Bearer ou une clé API. Combinez avec -L et -o pour un téléchargement complet.

$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/export

Téléchargement fiable avec reprise et réessai

Combinez -C - (reprise), --retry (réessai automatique en cas d'échec) et -L (suivre les redirections) pour des téléchargements robustes qui résistent aux interruptions réseau.

$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zip

Questions fréquentes sur le téléchargement avec curl

Quelle est la différence entre curl -o et curl -O ?

-o filename enregistre le téléchargement avec le nom de fichier exact que vous spécifiez. -O extrait le nom de fichier de l'URL et l'utilise. Utilisez -o quand vous voulez un nom ou chemin personnalisé ; utilisez -O quand le nom du fichier distant convient tel quel.

Pourquoi curl télécharge-t-il un fichier vide ou HTML au lieu du fichier réel ?

L'URL retourne probablement une redirection HTTP (301 ou 302). Par défaut, curl enregistre la réponse de redirection elle-même — pas le contenu final. Ajoutez -L pour suivre les redirections automatiquement : curl -L -o file URL.

Comment reprendre un fichier partiellement téléchargé avec curl ?

Utilisez curl -C - -o filename URL. L'option -C - détecte la taille du fichier existant et envoie un en-tête Range pour ne demander que les octets restants. Le serveur doit supporter les requêtes range.

Comment limiter la vitesse de téléchargement dans curl ?

Utilisez --limit-rate avec une valeur et un suffixe : curl --limit-rate 500k -o file URL plafonne la vitesse à 500 Ko/s. Suffixes : k (Ko/s), M (Mo/s), G (Go/s).

curl peut-il télécharger plusieurs fichiers à la fois ?

Oui. Utilisez plusieurs options -O : curl -O URL1 -O URL2 -O URL3. curl les télécharge séquentiellement. Pour des téléchargements parallèles, redirigez une liste d'URL vers xargs -P 4 -I {} curl -O {}.

Comment télécharger un fichier nécessitant une authentification ?

Pour HTTP Basic Auth : curl -u user:pass -o file URL. Pour les tokens Bearer : curl -H "Authorization: Bearer TOKEN" -o file URL. Pour les clés API dans les en-têtes : curl -H "X-API-Key: KEY" -o file URL.

Comment télécharger des fichiers depuis un serveur FTP avec curl ?

Utilisez curl -u user:pass -o localfile ftp://host/path/file. curl supporte nativement FTP, FTPS (FTP over TLS) et SFTP (SSH FTP). Pour un FTP anonyme, omettez -u.

Comment télécharger des fichiers volumineux de manière fiable avec curl ?

Combinez -C - (reprise en cas d'échec), --retry 5 (réessai automatique), --retry-delay 10 et -L (suivre les redirections) : curl -C - --retry 5 --retry-delay 10 -L -o file URL. Cela gère automatiquement les problèmes réseau.

Comment afficher une barre de progression lors du téléchargement avec curl ?

Utilisez curl -# -o file URL pour une barre de progression simple. La sortie par défaut de curl affiche déjà la vitesse de transfert, le pourcentage et le temps estimé. Pour les scripts, utilisez -s pour supprimer toute sortie.

Puis-je spécifier un répertoire de téléchargement dans curl ?

Avec curl 7.73+, utilisez --output-dir /path/to/dir combiné avec -O. Pour les versions antérieures, spécifiez le chemin complet avec -o /path/to/dir/filename. Ajoutez --create-dirs si le répertoire n'existe pas encore.

Dois-je utiliser curl ou wget pour télécharger des fichiers ?

Les deux sont excellents. wget est plus simple pour le mirroring récursif de sites web et possède une logique de réessai intégrée. curl supporte plus de 25 protocoles (pas seulement HTTP/FTP), est meilleur pour les appels API et le scripting, supporte plus de méthodes d'authentification et est disponible sur pratiquement tous les systèmes d'exploitation.

Comment utiliser curl dans un script bash pour télécharger des fichiers ?

Utilisez curl -fsSL -o file URL : -f échoue silencieusement sur les erreurs HTTP (pas de page d'erreur enregistrée), -s silencieux, -S affiche les erreurs même en mode silencieux, -L suit les redirections. Vérifiez le code de retour : if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.