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
Écrire la sortie dans un fichier nommé au lieu de stdout
Écrire la sortie dans un fichier portant le nom du fichier distant
Suivre automatiquement les redirections HTTP 3xx
Continuer/reprendre un transfert de fichier précédent
Limiter la vitesse de transfert au débit donné
Refuser de télécharger les fichiers dépassant la taille spécifiée
Utiliser l'en-tête Content-Disposition pour nommer le fichier
Afficher la progression du transfert sous forme de barre simple
Fournir nom_utilisateur:mot_de_passe pour l'authentification serveur
Réessayer le transfert en cas d'erreurs transitoires (nombre de fois)
Attendre ce nombre de secondes entre les tentatives
Envoyer un fichier local vers une URL (PUT par défaut)
Créer les répertoires locaux nécessaires lors de l'enregistrement
Supprimer le compteur de progression et les messages d'erreur
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
-olorsque 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-Lpour gérer les redirections et-spour un fonctionnement silencieux dans les scripts.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -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.csvdans le répertoire courant. - Utilisation courante
- Utilisez
-Olorsque le nom du fichier distant est significatif et que vous n'avez pas besoin de le renommer. Vous pouvez passer plusieurs options-Opour 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.csvcurl -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
-Lavec-oou-Olors 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.gzcurl -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 HTTPRangepour 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êteRange: 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.zipcurl --limit-rate : Limiter la vitesse de téléchargement
- Fonctionnement
- L'option
--limit-rateplafonne la vitesse de téléchargement (et d'envoi) au débit spécifié. Elle accepte les suffixes :kouKpour les kilooctets/s,mouMpour les mégaoctets/s,gouGpour les gigaoctets/s. - Utilisation courante
- Utilisez
--limit-ratepour é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.isocurl --max-filesize : Abandonner si le fichier est trop volumineux
- Fonctionnement
- L'option
--max-filesizeindique à curl d'abandonner le transfert si la taille attendue du fichier (d'après l'en-têteContent-Length) dépasse la limite spécifiée. La taille peut utiliser des suffixes commek,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.bincurl -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êteContent-Dispositiondu 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
-Javec-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=csvcurl -# : 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.gzOptions de téléchargement supplémentaires
Fournir nom_utilisateur:mot_de_passe pour l'authentification serveur
Réessayer le transfert en cas d'erreurs transitoires (nombre de fois)
Attendre ce nombre de secondes entre les tentatives
Envoyer un fichier local vers une URL (PUT par défaut)
Créer les répertoires locaux nécessaires lors de l'enregistrement
Supprimer le compteur de progression et les messages d'erreur
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.txtTé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.sqlTé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/exportTé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.zipQuestions 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.