Créer un serveur web en une ligne de commande avec Python3
Présentation
Nous allons voir dans ce tutoriel comment créer rapidement et facilement un serveur web via Python3, et cela, en une seule ligne de commande !
La création d’un serveur web rapide peut répondre à plusieurs besoins : tests rapides, échanges de fichiers entre systèmes, mise en place d’un service léger pour un besoin ponctuel, etc. Python3 possède un module fait pour répondre à ce besoin : http.server. C’est ce module que nous allons utiliser ici.
Premiers pas avec Python3 http.server
Imaginons que nous avons besoin partager rapidement du contenu disponible sur notre système à un collègue situé sur le même réseau que nous. Nous pouvons choisir d’utiliser le module “http.server” pour lui partager en direct tout notre répertoire courant. Je prépare pour l’exemple un répertoire de travail :
Il ne s’agit ici que d’un exemple, libre à vous de partager ce que vous souhaitez. Mais, gardez en tête que, par défaut, votre serveur web mettra à disposition le contenu du répertoire dans lequel la commande est exécutée.
Attention : il n’y a ici ni chiffrement ni authentification. Cela signifie que n’importe qui sur le réseau peut découvrir, parcourir et récupérer les documents que vous partagerez. Il faut en être conscient et opter pour d’autres solutions si la sécurité est un critère à prendre en compte.
Une fois dans le répertoire que nous souhaitons partager (il convient de se positionner dans ce répertoire avec “cd”), il nous suffit de démarrer notre service web via l’option “-m” et en indiquant module “http.server” :
Aller plus loin : les options de http.server
A. Ne pas partager le contenu du répertoire
Si vous ne souhaitez pas que les visiteurs de votre service web puissent voir le “Directory Listing”, c’est-à-dire la page par défaut qui affiche le contenu du répertoire courant, il vous suffit de créer un fichier “index.html” (même vide) dans votre répertoire :
Gardez cependant à l’esprit que les fichiers et dossiers de votre répertoire courant ne seront toujours accessibles si le client en connaît le chemin ou le nom ! Il s’agit plus d’un élément esthétique que d’une mesure de sécurité.
B. Partager un répertoire précis
Nous pouvons aussi facilement partager un répertoire précis au lieu du répertoire courant lors de la création de notre service web. Il faut pour cela spécifier l’option “-d” ou “–directory” :
Dès lors, quel que soit le répertoire dans lequel on se trouve dans le système de fichier, c’est le répertoire indiqué qui sera exposé :
C. Exposer le service sur une interface précise
Nous avons vu au tout début de ce tutoriel que, par défaut et si vous disposez de plusieurs adresses IP, le module “http.server” de Python3 va mettre en écoute son service web sur toutes vos adresses IP en même temps. Ce comportement peut être modifié grâce à l’option “-b” ou “–bind”. Par exemple, si je souhaite ne rendre accessible mon service web que sur mon adresse loopback (localhost), il suffit de préciser l’adresse IP de l’interface en question :
Vous aurez dans votre terminal la validation que c’est bien sur cette adresse IP là que sera exposé le service web, et aucune autre. Dans mon exemple, cela me permet d’être sûr qu’aucun voisin sur le réseau local de mes autres interfaces ne pourra accéder à mon service web.
Conclusion
Nous avons vu dans ce tutoriel comment mettre en place très rapidement un service web léger en Python grâce au module “http.server”. C’est une méthode très pratique qui possède quelques options de personnalisation.
Il faut savoir que le module “http.server” de Python3 peut être utilisé de façon beaucoup plus avancée via des scripts et véritables programmes. Malgré tout, on peut vite atteindre ses limites, notamment concernant ses performances qui ne pourront égaler celles des services web complets et dédiés comme Nginx ou Apache.
Source : www.it-connect.fr