Recherche de site Web

Transférer des fichiers à l'aide du serveur HTTP intégré de Python


Le besoin de transférer des fichiers sur un réseau est fréquent. Les systèmes GNU/Linux prennent en charge plusieurs protocoles et outils pour ce faire, dont certains sont conçus pour un partage de fichiers quelque peu permanent (tels que SMB, AFP et NFS), tandis que d'autres, tels que Secure Copy (SCP), sont utilisés pour un partage rapide de fichiers manuels et scriptés. transferts de fichiers. Parmi ceux-ci se trouve le protocole HTTP (HyperText Transfer Protocol), le protocole polyvalent et omniprésent sur lequel s'appuie le World Wide Web.

Python, qui est inclus par défaut dans la plupart des distributions Linux, fournit des serveurs HTTP simples via les modules "SimpleHTTPServer" et "http.server". Le premier se trouve dans la bibliothèque standard Python 2, tandis que le second est inclus dans Python 3. Ces serveurs HTTP légers ne nécessitent aucune installation séparée et peuvent être démarrés instantanément avec une seule commande.

Lire aussi : 10 One-Liners Python utiles que vous devez connaître

Installation de Python

Votre système inclut très probablement au moins une version de Python, mais si ce n'est pas le cas, installez Python 3 à l'aide de votre gestionnaire de packages natif.

Par exemple, sur Debian et Ubuntu :

sudo apt update
sudo apt install -y python3

Lire aussi : Comment utiliser Python pour les tâches d'administration système et de mise en réseau de base de Linux

Démarrage du serveur HTTP

Notez l'adresse IP utilisée par la machine émettrice.

ip a s

Découvrez quelle version de Python est installée avec les commandes suivantes :

python --version
python3 --version

Sur la même machine, remplacez votre répertoire de travail par celui contenant les fichiers que vous transférez. Soyez conscient du fait que l'intégralité du contenu de votre répertoire de travail actuel peut être accessible à toute personne sur votre réseau (ou sur Internet si la machine émettrice possède une adresse IP publique), pendant que le serveur HTTP Python est en cours d'exécution.

cd /path/to/files/

Par exemple:

cd /home/user/Documents/

Vous pouvez maintenant démarrer le serveur HTTP. Pour Python 2.x, utilisez le module SimpleHTTPServer :

python -m SimpleHTTPServer

Ou http.server dans le cas de Python 3.x :

python3 -m http.server

Les deux variantes écoutent sur le port 8000 par défaut, bien que vous puissiez spécifier explicitement un numéro de port différent après le nom du module.

python -m SimpleHTTPServer [port]
python3 -m http.server [port]

Remarque : les privilèges root sont requis si vous choisissez un port inférieur à 1024.

Lire aussi : 8 erreurs HTTP courantes et comment les corriger

Téléchargement de vos fichiers

Sur la machine réceptrice, vous pouvez utiliser n'importe quel client HTTP pour télécharger vos fichiers. Si vous utilisez un environnement graphique, un navigateur est souvent plus pratique que les utilitaires de ligne de commande. Accédez simplement à http://IP_ADDRESS:8000, où "IP_ADDRESS" est l'adresse IP de l'ordinateur expéditeur, et cliquez sur les fichiers souhaités pour les télécharger.

Alternativement, vous pouvez utiliser Wget ou cURL pour récupérer vos fichiers. Vous devriez déjà en avoir un ou les deux installés. Si ce n’est pas le cas, nous vous suggérons d’installer Wget, car il est plus convivial et prend en charge le téléchargement de répertoires entiers.

Pour Debian et Ubuntu :

sudo apt install wget

Pour RHEL et CentOS 6/7 :

sudo yum install wget

Pour Fedora et RHEL/CentOS 8 :

sudo dnf install wget

Utiliser Wget

Pour télécharger un seul fichier avec Wget, invoquez simplement Wget suivi de l'URL du fichier que vous souhaitez télécharger.

wget http://IP_ADDRESS:8000/filename

Vous pouvez également utiliser Wget pour télécharger de manière récursive l'intégralité du répertoire en ajoutant l'indicateur de ligne de commande -r.

wget -r http://IP_ADDRESS:8000/

Utiliser cURL

Par défaut, curl essaie d'imprimer le contenu du fichier sur votre terminal. Donc, pour enregistrer le fichier à la place, spécifiez un nom de fichier avec l'indicateur -o.

curl http://IP_ADDRESS:8000/filename -o filename

Conclusion

La fonctionnalité HTTP de la bibliothèque standard de Python fournit un moyen simple mais rapide et pratique de transférer des fichiers, parfait pour certains scénarios. Mais gardez à l’esprit que, comme il s’agit d’un simple HTTP sans cryptage ni authentification, vous devez faire attention à ne pas exposer les fichiers sensibles.

Articles connexes