Utilisation de cURL pour télécharger des fichiers distants à partir de la ligne de commande

Le puissant outil de ligne de commande curl peut être utilisé pour télécharger des fichiers à partir de n'importe quel serveur distant. Les utilisateurs de ligne de commande de longue date savent que cela peut être utile pour une grande variété de situations, mais pour simplifier les choses, beaucoup trouveront que le téléchargement d'un fichier avec curl peut être une alternative plus rapide à un navigateur Web ou un client FTP. OS X (ou Linux). Ceci est utile pour les situations locales, mais il y a une valeur particulière si vous êtes dans une situation où vous devez télécharger quelque chose sur un Mac distant lorsque vous êtes connecté via SSH.

Pour les besoins de cette procédure pas à pas, nous nous concentrerons principalement sur le téléchargement de fichiers à partir des deux protocoles HTTP et SFTP fréquemment rencontrés, mais il convient de noter que cURL prend en charge de nombreux autres protocoles. Bien que curl soit facile à utiliser, il est recommandé d'avoir une certaine connaissance de la ligne de commande.

Télécharger les fichiers de correspondance exacte avec curl -O

L'utilisation de l'indicateur majuscule -O avec curl télécharge le fichier à partir du serveur distant tout en conservant le nom de fichier exact, la syntaxe de base pour ceci est la suivante:

curl -O [url]

Cela signifie que si le fichier URL spécifié est nommé "sample.zip", il sera téléchargé avec le nom de fichier "sample.zip", et si le fichier est nommé quelque chose d'énorme et compliqué comme "LongExampleFileNameForOSXDaily-v-1-3-51-revision- 515b12-readme.txt "sur le serveur distant, il enregistrera avec ce nom exact sur la machine locale. Les noms de fichiers plus longs sont souvent mieux traités avec le drapeau -o plutôt qu'avec -O, que nous aborderons sous peu.

Les lecteurs réguliers peuvent se rappeler que nous avons utilisé la commande curl -O pour expliquer comment extraire le contenu audio réel d'un fichier de flux m3u.

Commencer tout téléchargement avec curl montre le pourcentage transféré, le temps passé à télécharger et le temps restant, et la vitesse de transfert.

La capture d'écran offre une meilleure représentation que l'exemple collé ci-dessous, mais elle ressemble à ceci:

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10505 100 10505 0 0 79741 0 --:--:-- --:--:-- --:--:-- 142k

Avec la vitesse de transfert, vous pouvez rediriger la sortie de curl vers / dev / null et l'utiliser pour tester la vitesse de la connexion Internet, mais la commande wget a une barre de transfert plus facile à lire et à suivre.

Enregistrement d'un fichier distant avec un nom différent avec curl -o

L'utilisation d'un indicateur -o en minuscule vous permettra de spécifier un nom de fichier différent pour le fichier téléchargé plutôt que son nom sur le serveur distant. Cela peut être utile pour réduire les noms de fichiers longs ou simplement étiqueter quelque chose afin qu'il soit plus facile à trouver par vous-même. La syntaxe générale serait:

curl -o [shortname] [url]

Par exemple, si vous souhaitez enregistrer un fichier iOS IPSW que vous avez trouvé répertorié sur des serveurs Apple sans avoir le nom complet long, vous pouvez utiliser ce qui suit:

curl -o iPhone5C-704.ipsw http://appldnld.apple.com/iOS7/031-1828.20131114.P3wE4/iPhone5, 3_7.0.4_11B554a_Restore.ipsw

Cela va télécharger le fichier "iPhone5, 3_7.0.4_11B554a_Restore.ipsw" mais nommé plus court comme le plus significatif "iPhone5C-704.ipsw".

Si vous préférez ne pas enregistrer le fichier dans le répertoire de travail actuel, spécifiez un chemin comme faisant partie du nom de fichier:

curl -o ~/Desktop/localexample.dmg http://url-to-file/example.dmg

Téléchargement simultané de plusieurs fichiers avec curl

cURL peut facilement télécharger plusieurs fichiers en même temps, tout ce que vous devez faire est de spécifier plus d'une URL comme ça:

curl -O [URL 1] [URL 2] [URL 3]

Pour les fichiers avec des noms différents, ou hébergés sur des serveurs différents, ou dans des chemins de répertoire différents, utilisez l'URL complète, par exemple:

curl -O http://ftp.gnu.org/gnu/Licenses/fdl-1.1.txt http://ftp.gnu.org/gnu/Licenses/lgpl-2.1.txt http://ftp.gnu.org/gnu/GNUinfo/Audio/index.txt

D'un autre côté, si les noms de fichiers à télécharger utilisent une dénomination incrémentielle, vous pouvez utiliser des parenthèses pour spécifier une plage de téléchargement, comme ceci:

curl -O http://ftp.gnu.org/gnu/Licenses/fd1-1[1-3].txt

Cela récupérerait les fichiers fdl-1.1.txt, fd1-1.2.txt et fd1-1.3.txt en même temps sans avoir à spécifier chaque URL unique. Bien sûr, cela ne fonctionne que si les fichiers sont dans le même répertoire et sur le même domaine.

Authentifier avec curl

Vous pouvez également passer l'authentification avec cURL en utilisant l'indicateur -u:

curl -u user:pass -O ftp://remote_url/file-to-download.zip

Gardez à l'esprit que l'historique bash stockera le mot de passe en texte brut lorsque vous utilisez -u avec un nom d'utilisateur et un mot de passe spécifiés, ce qui n'est pas recommandé dans la plupart des cas. Vous pouvez contourner cela en plaçant un espace devant "curl". Si vous n'utilisez pas la barre d'espace pour préfixer la commande, vous voudrez probablement vider l'historique des commandes par la suite pour être sûr.

Protocoles pris en charge et utilisation au-delà de HTTP et FTP

Comme mentionné précédemment, l'utilisation de cURL va bien au-delà de HTTP et FTP, car l'entrée de la page de manuel curl mentionne des protocoles supplémentaires dans la description:

curl est un outil pour transférer des données depuis ou vers un serveur, en utilisant l'un des
protocoles pris en charge (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP,
IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS,
TELNET et TFTP).

De plus, curl peut également être utilisé pour les requêtes PUT et POST, les cookies, les proxies, les tunnels, les téléchargements de CV, et même pour saisir des informations d'en-tête HTTP ou changer un agent utilisateur (spoofing) sans avoir à utiliser un web dédié navigateur.

Comme la plupart des utilitaires de ligne de commande, vous pouvez en apprendre beaucoup plus sur curl en invoquant la page man appropriée avec la commande 'man curl'.