Guide complet sur le téléchargement de fichiers à l'aide de cURL

Commentaires: 0

cURL ou Client URL est un outil développé pour récupérer des fichiers, s'interfacer avec des API et même tester des ressources web. Il est également disponible pour les systèmes d'exploitation Windows, Mac et Linux, ce qui permet à tout utilisateur de cURL de télécharger facilement des fichiers. Client URL convient au simple téléchargement de fichiers ainsi qu'à des tâches plus avancées impliquant la manipulation de données et même l'intégration de scripts.

Dans cet article, nous verrons comment télécharger des fichiers à l'aide de cURL, en abordant quelques commandes cURL utiles pour le téléchargement, la spécification de noms, de dossiers, et la gestion des redirections, des limitations de vitesse, et bien d'autres choses encore. Nous aborderons également les commandes spécifiques à cURL sur les systèmes Windows, Linux et Mac.

Client URL.jpg

Gestion des noms de fichiers

Il est essentiel de choisir le nom de fichier correct lors de l'enregistrement du document téléchargé. cURL n'enregistre pas les données mais les affiche sur le terminal. Par conséquent, si l'utilisateur ne choisit pas d'emplacement pour enregistrer le fichier, celui-ci ne sera pas trouvé dans le système de fichiers.

Toutes les commandes avec cURL sont effectuées sur la ligne de commande: en utilisant Windows - cmd ou PowerShell et Linux ou macOS - terminal.

Pour nommer manuellement les fichiers, l'utilisateur doit utiliser la commande "-o" ou, pour son format verbeux, "-output".

Prenons l'exemple suivant:


curl -o test.html https://example.com

Cette commande va chercher la page sur exemple.com et l'enregistrer sous test.html dans le répertoire de travail actuel.

Par défaut, cURL enregistre le fichier dans le même répertoire que le fichier exécutable, sauf indication contraire.

Comment utiliser cURL pour enregistrer un fichier en spécifiant le répertoire dans lequel le fichier doit être stocké:


curl -o ~/Downloads/test.html https://example.com

Cette option place le fichier dans le sous-dossier Téléchargements du répertoire personnel de l'utilisateur.

Dans cette configuration, si un fichier existe déjà, le nouveau fichier remplacera l'ancien sans avertissement. Pour contourner ce problème, il faut utiliser cURL -O afin que le fichier puisse être enregistré sous le nom fourni dans l'URL:


curl -O https://example.com/file.txt

Si le file.txt correspond à ce qui est indiqué dans l'URL, il sera automatiquement stocké sous ce nom. Si un tel fichier existe déjà, il sera remplacé.

Pour s'assurer qu'il n'y a pas de perte de données, il est possible de définir une demande de vérification avant le téléchargement:


if [ -f file.txt ]; then
    echo "File already exists!"  
else  
    curl -O https://example.com/file.txt  
fi

This script first scans to see if the file is already present, only downloading the file if it is not.

Gestion des redirections

Certains fichiers ne sont pas enregistrés dans des emplacements spécifiques, mais sont obtenus par le biais d'une redirection. Par exemple, un utilisateur de cURL qui tente de télécharger un fichier volumineux peut découvrir que le navigateur le dirige vers une autre page avant de commencer le téléchargement. cURL ne suit pas les redirections par défaut, mais cela peut être modifié.

Pour permettre à cURL de suivre automatiquement les redirections, ajoutez l'option -L:


curl -L -o test.zip https://example.com/download

Si le serveur redirige d'abord l'utilisateur, cURL effectuera d'abord la nouvelle demande et ce n'est qu'ensuite que le fichier sera téléchargé à partir de l'URL.

Pourquoi c'est important:

  • Éviter de devoir passer par des pages intermédiaires. Certaines pages mettent en place des redirections pour des raisons telles que les téléchargements limités, l'authentification ou les publicités.
  • Utilisation d'URL raccourcies. Par exemple, Bit.ly ou TinyURL, et d'autres, redirigent simplement l'utilisateur vers l'URL réelle, sans -L, le cURL récupérera une page HTML avec la redirection au lieu du fichier réel.
  • Prise en charge du transfert HTTPS. Un certain nombre de sites transfèrent d'abord toutes les demandes http:// vers https://. Si -L n'est pas utilisé, le téléchargement de fichiers ne fonctionnera pas.

La méthode de cURL traite chaque redirection dans l'ordre, en suivant chaque lien qui mène à une autre URL dans l'ordre jusqu'à ce qu'il atteigne le lien cible. Si le serveur se retrouve coincé dans une boucle sans fin de redirections, il sera pris au piège. cURL dispose d'une commande qui peut être utilisée pour gérer le nombre de redirections, à savoir '--max-redirs'.


curl -L --max-redirs 5 -o file.zip https://example.com/download

Ce paramètre impose une restriction à cURL, qui interrompt le processus de téléchargement si un trop grand nombre de redirections sont traitées et dépassent la limite spécifiée.

Voici un exemple donné par cURL lorsque les limites de redirection sont dépassées:


curl: (47) Maximum redirection limit reached

Téléchargement de plusieurs fichiers

En utilisant cURL, vous pouvez télécharger plusieurs fichiers simultanément, et certaines commandes fonctionneront sur plusieurs systèmes d'exploitation, tandis que d'autres seront spécifiques à Windows ou Linux/macOS.

Méthodes communes à tous les systèmes d'exploitation

  • Si un serveur contient plusieurs fichiers, il suffit d'ajouter autant de commandes -O que nécessaire:
    
    curl -O https://example.com/file1.zip -O https://example.com/file2.zip
    
    
  • Si les fichiers sont numérotés de manière séquentielle, comme file1.zip, file2.zip, file3.zip, vous pouvez mettre le nom du fichier entre parenthèses:
    
    curl -O https://example.com/file{1,2,3}.zip
    
    

Pour Windows

  • Pour Windows cURL, si un utilisateur dispose d'un document texte contenant les URL comme urls.txt, il peut télécharger le fichier à l'aide de la ligne de commande:
    
    Get-Content urls.txt | ForEach-Object { curl -O $_ }
    
    
  • Si les fichiers sont numérotés, vous pouvez utiliser une boucle:
    
    For ($i=1; $i -le 3; $i++) { curl -O "https://example.com/file$i.zip" }
    
    

Pour Linux et MacOS

  • Téléchargement à partir d'une liste.

    Pour commencer, créez un fichier urls.txt contenant une liste de liens:

    
    https://example.com/file1.zip 
    https://example.com/file2.zip 
    https://example.com/file3.zip
    
    

    Exécutez ensuite la commande:

    
    xargs -n 1 curl -O < urls.txt
    
    
  • Téléchargement en boucle (Bash).

    Dans le cas où les fichiers sont numérotés, il est pratique d'utiliser pour:

    
    for i in {1..5}; do 
     curl -O https://example.com/file$i.zip 
    done
    
    

Limitation du taux

Lorsqu'il est nécessaire de télécharger un fichier volumineux à l'aide de cURL et que l'on s'attend à un trafic à faible bande passante, l'option --limit-rate est disponible. Elle permet de fixer une limite à la vitesse de téléchargement en (k) kilo-octets par seconde, (m) méga-octets par seconde ou (g) giga-octets par seconde.

Pour les utilisateurs de cURL, la structure des commandes est la même sur tous les systèmes d'exploitation:


curl --limit-rate 500k -O https://example.com/archive.zip

Dans ce cas, 500k signifie que la vitesse de téléchargement ne doit pas dépasser 500 KB/s.

Autres notes:

  • --limit-rate 2m - limite de 2 MB/s;
  • --limit-rate 100k - limite de 100 KB/s.

Voici un exemple de script pour télécharger archive1.zip, archive2.zip et archive3.zip à une vitesse de téléchargement de 500 KB/s.

Windows (PowerShell):


1..3 | ForEach-Object { curl --limit-rate 500k -O https://example.com/archive$_.zip }

Linux/macOS (Bash):


for i in {1..3}; do 
 curl --limit-rate 500k -O https://example.com/archive$i.zip 
done

L'option --limit-rate est efficace dans les conditions d'une connexion réseau soutenue, car elle réduit les risques d'interruption du réseau. Cela est utile lorsque plusieurs fichiers sont téléchargés en même temps, ou si d'autres activités sont effectuées sur le réseau. En outre, l'option --limit-rate permet de réduire les risques d'être bloqué par un serveur qui impose des restrictions aux téléchargements. Lorsque le téléchargement est effectué via un proxy, le paramètre permet de réduire la charge et de minimiser les risques de coupure. Cette commande permet également de gérer le trafic lors de l'utilisation de l'internet mobile ou de tarifs avec un volume de données limité.

Téléchargements silencieux

Dans cURL, la progression d'un téléchargement, ainsi que sa vitesse, est affichée par défaut dans une fenêtre de terminal. C'est utile pour certains utilisateurs de cURL, mais cela peut être supprimé pour les scripts ou les processus automatisés. Dans ce cas, l'option -s ou --silent peut être activée.

Exemple d'utilisation de la ligne de commande cURL en mode "silencieux" pour télécharger des fichiers:


curl -s -O https://example.com/file.zip

Comme le suggère la commande, tous les fichiers doivent être téléchargés avec cURL sans qu'aucune information ne soit affichée à l'écran. S'il est nécessaire de n'afficher que les erreurs et de mettre tous les autres messages en sourdine, la commande -S (--show-error) peut être utilisée et combinée avec les arguments susmentionnés:


curl -s -S -O https://example.com/file.zip

Authentification

Le téléchargement de certains fichiers et l'utilisation de certaines API nécessitent une autorisation. L'architecture de cURL prend en charge un grand nombre de procédures d'authentification telles que celles qui utilisent un nom d'utilisateur et un mot de passe, ou même des jetons d'accès.

Si l'accès nécessite un nom d'utilisateur et un mot de passe, ceux-ci peuvent être envoyés en tant qu'argument unique avec l'option -u:


curl -u username:password -O https://example.com/protected-file.zip

Si le mot de passe comporte des éléments spéciaux tels que @, #, &, etc., il est conseillé de le mettre entre guillemets:


curl -u username:"your@password#123" -O https://example.com/protected-file.zip

Si seul le nom d'utilisateur est envoyé, cURL demande le mot de passe.

Une autre méthode d'authentification au système d'un émetteur peut être réalisée à l'aide d'un jeton d'accès. Dans ce cas, le jeton est inclus dans l'en-tête de la requête avec le code suivant:


curl -H "Authorization: Bearer your_token_here" -O https://api.example.com/data.json

Certains services peuvent exiger que le jeton soit inclus directement dans l'URL. Dans ce cas, la commande ressemblera à ceci:


curl -O https://api.example.com/data.json?access_token=your_token_here

Dans tous les cas, l'insertion du jeton dans l'URL peut être problématique car le chemin d'accès de l'utilisateur peut être stocké dans l'historique du navigateur ou dans les journaux du serveur.

Ces méthodes d'authentification fonctionnent bien lorsqu'il s'agit de récupérer des données dans les fichiers d'un serveur protégé, de demander des données à des API ou d'accéder à des données au sein d'un environnement d'entreprise.

Téléchargement via Proxy

Les proxys sont particulièrement utiles pour cURL et son utilisation courante est l'accès à distance aux fichiers, car cURL prend en charge la transmission de données par le biais de la plupart des protocoles.

La définition d'un proxy se fait avec -x (ou -proxy).

La forme générale de la commande est la suivante:


curl -x [scheme://]proxy-server[:port] -o output.file URL

Exemple: téléchargement d'un fichier via un proxy HTTP:


curl -x http://proxy.testnet.com:80 -o file.zip https://example.com/archive.zip

Où:

  • -x http://proxy.testnet.com:80 - désigne le proxy HTTP requis et le port qu'il utilisera;
  • -o archive.zip - indique le nom du fichier sous lequel il doit être stocké;
  • https://example.com/archive.zip - l'emplacement du fichier en cours de téléchargement.

Lorsqu'un nom d'utilisateur et un mot de passe sont requis pour les serveurs proxy, ils peuvent être utilisés comme suit:


curl -x http://proxy.example.com:80 -U user:password -o archive.zip https://example.com/archive.zip

Une approche différente: l'authentification via l'URL:


curl -x http://user:password@proxy.example.com:80 -o archive.zip https://example.com/archive.zip

Pour travailler avec SOCKS5 ou SOCKS4, définissez le paramètre --proxy avec le type, par exemple:


curl --proxy socks5h://proxy.example.com:1080 -o archive.zip https://example.com/archive.zip

Nuance importante:

  • socks5h:// - permet de faire passer les requêtes DNS par le proxy, ce qui accroît l'anonymat;
  • socks5:// - transmet les requêtes DNS directement (moins sûr).

Le proxy assure l'anonymat puisque l'adresse IP d'origine n'est pas accessible aux sites visités par l'utilisateur. En outre, les ressources bloquées dans certaines régions peuvent être contournées si l'on y accède depuis un autre pays. En utilisant un proxy pour télécharger des fichiers, les utilisateurs de réseaux d'entreprise peuvent accéder à des ressources fermées et améliorer les vitesses de chargement grâce aux restrictions imposées par le fournisseur ou à la mise en cache des données.

Suivi des progrès

Il est conseillé de rester vigilant afin de superviser correctement le processus de téléchargement de fichiers à l'aide de cURL, en particulier lorsqu'il s'agit de fichiers volumineux. Pour ce faire, il est possible d'utiliser les fonctionnalités intégrées qui comprennent l'affichage de la progression, comme une barre de téléchargement interactive, ainsi que des informations détaillées sur les fichiers téléchargés.

L'option -# ou --progress-bar remplace l'indicateur de téléchargement en pourcentage par une barre mobile. Cette option est utile si l'on souhaite mesurer les performances du système sous une forme plus compacte et graphique.


curl -# -o file.zip https://example.com/file.zip

Une barre avec un indicateur de remplissage se déplace de gauche à droite:

1.jpg

Cette méthode est pratique si l'on souhaite suivre l'opération tout en limitant la quantité d'informations affichées.

Pour observer plus en détail la vitesse, le temps et la quantité de données téléchargées, il est possible d'utiliser conjointement les options -v et -w.

  • Exemple avec -v (quelques détails supplémentaires dans la sortie):
    
    curl -v -o file.zip https://example.com/file.zip
    
    
  • Pour afficher les principaux indicateurs à la fin du téléchargement, vous devez définir un formulaire particulier avec -w:
    
    curl -o file.zip -w "Download speed: %{speed_download} bits per second\n" https://example.com/file.zip
    
    

Cela permet de contrôler la vitesse de téléchargement tout au long du processus.

Dans les cas où la connexion est instable, la vitesse de téléchargement peut être évaluée de près. En cas d'obstruction, il y aura une baisse soudaine de la vitesse du processus ou une diminution totale. Lorsque la connexion est stable, la vitesse et les performances globales du réseau peuvent être contrôlées.

Informations sur la demande/réponse

La commande cURL permet de récupérer une multitude d'informations qui peuvent aider à identifier des problèmes tels que les déconnexions, les ratifications, ou même les paramètres des codes de réponse HTTP qui peuvent être cruciaux pour diagnostiquer les erreurs. Pour ce faire, le drapeau -v sera utilisé pour activer le mode de sortie étendu.

Exemple:


curl -v -o file.zip https://example.com/archive.zip

La sortie ressemblera à ceci pendant l'exécution de la commande.

2.jpg

Vous remarquerez les données clés suivantes:

  • l'adresse IP du serveur et l'établissement de la connexion;
  • la requête HTTP originale;
  • l'état de la réponse du serveur;
  • les en-têtes de réponse qui comprennent Content-Type, la date et certains paramètres de mise en cache.

Les détails des requêtes et des réponses du serveur peuvent être visualisés avec cURL en utilisant l'option -v. Cela permet de savoir comment le client communique avec le serveur. Par exemple, dans le cas d'une redirection, si le serveur modifie l'emplacement vers une nouvelle URL, "-v" indiquera l'utilisation des commandes "status 301 Moved Permanently" ou "302 Found".

Cela permet également de vérifier les erreurs, telles que "403 Forbidden" ou "404 Not Found", qui font référence à un accès restreint et à l'absence de fichier. En outre, les en-têtes de réponse peuvent également être vérifiés pour analyser différents paramètres de fichiers avant le processus de téléchargement.

cURL vs Wget

cURL et Wget sont les deux outils les plus importants pour le téléchargement de fichiers sur des interfaces de ligne de commande et cURL et Wget sont largement utilisés à cette fin, bien qu'ils diffèrent en termes de fonctionnalités.

Par ailleurs, examinons les principales distinctions entre eux.

Fonction cURL Wget
Prise en charge des téléchargements parallèles Nécessite des commandes supplémentaires Intégré
Reprise automatique des téléchargements Requiert l'indicateur -C Intégré
Fonctionne avec les API (envoi de requêtes POST, PUT et d'en-têtes) Par défaut Limitée
Contourner les redirections Avec l'option -L Intégré
Prise en charge du proxy Par défaut Par défaut
Barre de progression intégrée Besoins -# drapeau Absent
Fonctionnement en arrière-plan Non pris en charge Nécessite l'option -b
Intégration dans les scripts Oui (renvoie le code de réponse) Limitée

Wget et cURL présentent également des différences dans la syntaxe des commandes:

  • Dans cURL, il est nécessaire d'indiquer des drapeaux lors de l'utilisation explicite des commandes: mettre -O, lors de l'enregistrement d'un fichier, -C - lors de la poursuite d'un téléchargement et -L lors du suivi de redirections. Si aucune option d'enregistrement dans un fichier n'est spécifiée, cURL imprime par défaut le contenu du fichier sur l'écran du terminal.
  • Dans Wget, les commandes sont simples; le fichier est téléchargé automatiquement sans qu'aucun indicateur supplémentaire ne soit spécifié, la reprise se fait avec -c, et les redirections sont automatiques.

Wget semble avoir été créé principalement pour télécharger des fichiers, tandis que cURL a été conçu pour interagir avec les requêtes HTTP et les API.

En termes de protocoles pris en charge, Wget est désavantagé par rapport à cURL à bien des égards.

curl-i-wget.png

Conclusion

En effet, cURL est admirable pour sa prise en charge d'une multitude de protocoles, de conventions de dénomination de fichiers, d'utilisation de proxy et pour sa capacité à reprendre des téléchargements interrompus.

cURL est adapté non seulement aux téléchargements simples, mais aussi à l'intégration avec des API ou à l'extraction massive de données. Cependant, sa capacité à rediriger, à fixer des limites de vitesse, à authentifier et à suivre l'interaction avec le serveur, à permettre le diagnostic de la connexion au serveur et à tester les ressources web en fait un excellent outil polyvalent. Et grâce à la souplesse de personnalisation des paramètres, cURL peut être adapté à n'importe quelle tâche.

Commentaires:

0 Commentaires