5 façons de télécharger des fichiers via le terminal Linux (qui ne sont pas Curl ou WGET)
Agence web » Actualités du digital » 5 façons de télécharger des fichiers via le terminal Linux (qui ne sont pas Curl ou WGET)

5 façons de télécharger des fichiers via le terminal Linux (qui ne sont pas Curl ou WGET)

Avez-vous déjà été coincé dans un système sans aucun moyen d'envoyer une demande HTTP simple? Peut-être que vous essayiez de sauver un système ou de construire une image Docker. Parfois, vous devez utiliser les outils à votre disposition; D'autres fois, c'est juste de la curiosité. J'ai cinq façons de connecter et de télécharger des fichiers via HTTP.

Tout d'abord, comprenez l'en-tête HTTP nécessaire

Pour établir des connexions HTTP, vous devez souvent envoyer un en-tête HTTP. Vous devez en créer un manuellement pour certaines des commandes ci-dessous, mais ce n'est pas compliqué.

Un en-tête HTTP est un petit bloc de texte qui configure une connexion HTTP. Dans la plupart des exemples ci-dessous, l'en-tête HTTP ressemblera à ce qui suit:

        GET / HTTP/1.1rn
HOST: example.comrn
rn

La première ligne s'appelle la ligne de demande, et il dit au client de récupérer quelque chose sur un chemin donné. Le chemin est tout ce qui vient après le .com, .net, etc., dans une URL – par exemple, exemple.com/path/foo.

  • La ligne d'hôte indique le nom d'hôte auquel nous nous connectons.

  • Chaque ligne se termine par un retour chariot explicite ( r) et une nouvelle ligne ( n). L'en-tête entier se termine avec une ligne vide.

L'en-tête illustré ci-dessus récupère le document principal sur example.com (chemin « https://www.howtogeek.com/ »). Maintenant que vous comprenez l'en-tête HTTP, vous pouvez l'utiliser avec certaines des commandes suivantes.

Telnet, mais cela ne fonctionne que pour les connexions HTTP simples

La commande suivante semble étrange, mais ce qui se passe, c'est que nous construisons un en-tête HTTP personnalisé car Telnet n'est pas un client HTTP. Les supports représentent une sous-coquille, et chaque commande – séparée par des demi-colons – obtiennent des objets exécutés et tués dans Telnet un à la fois.

        (echo "GET / HTTP/1.0"; echo "Host: example.com"; echo; sleep 1) | telnet example.com 80
    

Par exemple, si vous exécutez ce qui suit dans votre terminal, vous verrez que Grep reçoit chaque ligne individuellement:

        (echo foobar; sleep 1; echo foobaz) | grep foo
    

Pour Telnet, cela signifie qu'il reçoit chaque ligne de l'en-tête HTTP individuellement, en tant que flux de données. La commande envoie également une ligne vierge (Echo) pour terminer la connexion, puis attend 1 seconde, permettant au serveur suffisamment de temps pour répondre. Cette approche d'attente est fragile car nous devions seulement combien de temps la réponse prendra la réponse. Vous devrez peut-être ajuster cette valeur si la connexion se ferme trop tôt.

Telnet ne peut pas utiliser TLS, et cela ne fonctionnera donc que pour les connexions HTTP simples.

HTTP / 1.0 ferme automatiquement la connexion une fois que le serveur répond, mais HTTP / 1.1 ne le fait pas. Par conséquent, nous utilisons HTTP / 1.0, car Telnet n'est pas fiable pour télécharger des fichiers volumineux via HTTP, et nous n'avons donc pas besoin que la connexion reste ouverte.

Vous pouvez installer Telnet sur Fedora en utilisant la commande suivante:

        sudo dnf install telnet -y
    

Pour Debian et ses amis, saisissez la commande suivante:

        sudo apt install telnet -y
    

Pour les utilisateurs d'arc, vous n'avez pas de chance. Telnet n'est pas disponible dans les référentiels officiels. Cependant, Putty l'est, vous pouvez donc l'utiliser à la place.

        sudo pacman -S putty

Netcat est légèrement meilleur que Telnet

Pour établir des connexions HTTP, la commande NetCAT fonctionne presque identique à la commande Telnet, sauf que nous lui alimentons l'en-tête HTTP en un seul bloc de texte. Vous pouvez voir à partir des exemples au-dessus et en dessous que chaque ligne de l'en-tête HTTP se termine par les caractères de contrôle  » r n » – avez fait pour la dernière ligne, pour signaler l'extrémité de l'en-tête.

Aucun des exemples suivants (NetCAT ou NCAT) n'est fiable pour télécharger des fichiers volumineux, mais ils téléchargeront facilement de petits fichiers.

HTTP, vieux

NetCAT ne prend pas en charge TLS (HTTPS), mais nous pouvons l'utiliser pour récupérer un vieux HTTP ordinaire.

        printf "GET / HTTP/1.0rnHost: example.comrnrn" | nc example.com 80
    

Vous pouvez installer Netcat sur Fedora avec la commande suivante:

        sudo dnf install netcat -y
    

Pour Debian et ses amis, saisissez la commande suivante:

        sudo apt install netcat-openbsd -y
    

Pour les utilisateurs d'Arch, Netcat est disponible dans le référentiel supplémentaire:

        sudo pacman -S openbsd-netcat

Avec TLS

Si vous souhaitez vous connecter sur une connexion TLS, vous devrez utiliser NCAT, une amélioration par rapport à NetCAT, qui fait partie du projet NMAP. Le NCAT peut également établir également de vieilles connexions HTTP simples.

        printf "GET / HTTP/1.1rnHost: example.comrnrn" | ncat --ssl example.com 443
    

Vous pouvez installer NCAT sur Fedora en utilisant la commande suivante:

        sudo dnf install nmap-ncat -y
    

Pour Debian et ses amis, saisissez la commande suivante:

        sudo apt install ncat -y
    

Pour les utilisateurs d'Arch, NCAT fait partie du package NMAP, et vous devez donc taper la commande suivante:

        sudo pacman -S nmap

Lorsque vous êtes désespéré, utilisez la bibliothèque de requêtes pour Python

La commande suivante fonctionne bien pour le texte brut ou les fichiers HTML, mais il mal géré les données binaires (par exemple, images, zips, etc.).

        python3 -c "import requests; print(requests.get('http://example.com').text)"
    

Pour télécharger correctement les données binaires, comme les images ou les fichiers zip, utilisez la commande suivante:

        python3 -c "import requests; open('output_file.zip','wb').write(requests.get('http://example.com/file.zip').content)"
    

Modifiez le « output_file.zip » et l'URL.

Bien que la plupart des systèmes aient probablement Python 3 (et PIP) préinstallé, vous devrez installer la bibliothèque de requêtes séparément. Vous pouvez l'installer en utilisant PIP ou le gestionnaire de packages de votre distribution.

Si vous n'avez pas de privilèges administratifs, vous pouvez l'installer dans le répertoire domestique de l'utilisateur à l'aide de PIP. Tapez la commande suivante:

        pip install --user requests
    

Vous pouvez installer des demandes via le gestionnaire de packages de Fedora à l'aide de la commande suivante:

        sudo dnf install python3-requests -y
    

Pour Debian et ses amis, saisissez la commande suivante:

        sudo apt install python3-requests -y
    

Pour Arch, saisissez la commande suivante:

        sudo pacman -S python-requests

Httpie: un utilitaire pratique

Httpie se décrit comme un outil pour tester les API REST (services pour les pages Web). La commande suivante fait une demande simple pour obtenir le document HTML trouvé sur example.com:

        http GET example.com
    

HTTPIE prend en charge plusieurs fonctionnalités pratiques qui facilitent un peu les URL de l'écriture. Par exemple, la commande suivante se connectera à un serveur hébergé localement sur votre système sur le port 3000:

        http :3000
    

L'ajout de paramètres à l'URL est aussi simple que d'utiliser un signe double égal:

        http httpbin.org/anything foo==bar
    

Cela créerait une URL qui ressemble à http://httpbin.org/anything?foo=bar.

Pour établir une connexion HTTPS, utilisez la commande suivante:

        https GET example.com
    

Bien que HTTPIE vise principalement à aider les développeurs, il fonctionne également bien en tant que client HTTP ordinaire, le rendant parfait pour le téléchargement de fichiers.

Vous pouvez installer Httpie sur Fedora en utilisant la commande suivante:

        sudo dnf install httpie -y
    

Pour Debian et ses amis, saisissez la commande suivante:

        sudo apt install httpie -y
    

Pour Arch, saisissez la commande suivante:

        sudo pacman -S httpie

Aria2: un couteau à armée suisse pour le réseau

Aria2 est un puissant téléchargeur de fichiers pour le terminal. Il prend en charge plusieurs protocoles, notamment HTTP, HTTPS, FTP, SFTP, BitTorrent, WebSocket, etc. Il accélère également les téléchargements en établissant plusieurs connexions parallèles. Pour télécharger un fichier, spécifiez simplement le répertoire avec l'indicateur « -d » et le nom de fichier de sortie avec l'indicateur « -o ».

        aria2c -d /tmp -o test.html http://example.com
    

ARIA2 fonctionne sans effort pour HTTP, HTTPS, téléchargeant des documents HTML et des fichiers.

Vous pouvez installer Aria2 sur Fedora en utilisant la commande suivante:

        sudo dnf install aria2 -y
    

Pour Debian et ses amis, saisissez la commande suivante:

        sudo apt install aria2 -y
    

Pour Arch, saisissez la commande suivante:

        sudo pacman -S aria2
    

En raison de la manipulation HTTP incorrecte, les commandes Telnet et NetCAT fonctionnent uniquement pour les fichiers pas plus élevés que quelques kilobytes. Pour télécharger des fichiers plus grands, vous devrez utiliser un client HTTP approprié. Les commandes Python, Httpie et Aria2 fonctionnent tous comme de vrais clients HTTP. Pour aider à déterminer si vous utilisez un véritable client HTTP, demandez si vous devez injecter manuellement les en-têtes HTTP; Si vous le faites, vous n'utilisez probablement pas un vrai client HTTP.

En pratique, Telnet et NetCAT servent principalement d'outils d'urgence: utile lorsque vous devez tester une connexion mais que vous n'avez aucun outil spécialisé. À tout le moins, ils fournissent une introduction intéressante aux niveaux inférieurs d'une connexion HTTP.

Si vous voulez en savoir plus sur Telnet, vous pouvez lire notre article sur les différences entre Telnet et SSH. Ou, nous avons un autre article qui détaille plusieurs autres cas d'utilisation pour NetCAT. Enfin, nous avons un guide détaillé sur la façon d'utiliser Httpie, qui est un utilitaire très intéressant.

★★★★★