Créer des serveurs web avec http.server en Python

1. À propos du module http.server et ses usages

Le module http.server de Python fournit des classes pour implémenter des serveurs HTTP simples. Il fait partie de la bibliothèque standard, ce qui signifie qu'il est disponible sans installation supplémentaire. Ce module est idéal pour le développement local, le partage rapide de fichiers, les tests d'API, ou comme base pour construire des serveurs web plus complexes.

Les classes principales sont : HTTPServer (le serveur lui-même) et BaseHTTPRequestHandler (classe de base à hériter pour personnaliser les réponses). La classe SimpleHTTPRequestHandler permet de servir directement des fichiers depuis le répertoire courant.

2. Lancer un serveur de fichiers en une seule ligne

La manière la plus simple d'utiliser http.server est d'exécuter le module directement en ligne de commande. Cela lance un serveur qui sert les fichiers du répertoire courant sur le port 8000.

2.1 Serveur de fichiers simple en ligne de commande

La commande python -m http.server démarre instantanément un serveur HTTP. Il suffit d'ouvrir un navigateur à l'adresse http://localhost:8000 pour visualiser et télécharger les fichiers.

2.2 Serveur de fichiers avec port et adresse personnalisés

On peut spécifier le port et l'adresse d'écoute. L'utilisation de bind permet de rendre le serveur accessible sur le réseau local.

3. Utiliser SimpleHTTPRequestHandler en programmation

Pour intégrer un serveur de fichiers dans un script Python, on utilise la classe SimpleHTTPRequestHandler avec HTTPServer. Cela permet de contrôler le comportement du serveur par programme.

3.1 Serveur de fichiers basique en script

Ce script crée un serveur HTTP qui sert les fichiers du répertoire courant. Le serveur tourne jusqu'à ce qu'on l'arrête avec Ctrl+C.

3.2 Servir un répertoire spécifique

Pour servir un répertoire différent du répertoire courant, on peut changer le répertoire de travail avant de lancer le serveur ou créer un gestionnaire personnalisé.

4. Créer un serveur personnalisé avec BaseHTTPRequestHandler

Pour créer des endpoints personnalisés, on hérite de BaseHTTPRequestHandler et on surcharge les méthodes do_GET(), do_POST(), etc. Cela permet de construire des API simples ou des serveurs web dynamiques.

4.1 Serveur avec routes personnalisées

Cet exemple montre comment répondre différemment selon le chemin demandé. On utilise self.path pour récupérer l'URL demandée.

4.2 Gestion des requêtes POST avec réception de données

Pour traiter les requêtes POST, on surcharge do_POST() et on lit le corps de la requête avec self.rfile.read(). Cela permet de créer des endpoints qui acceptent des données envoyées par un client.

5. Serveur avec gestion des paramètres d'URL et fichiers statiques

On peut améliorer le serveur en analysant les paramètres d'URL (?key=value) et en servant des fichiers statiques comme des images, CSS ou JavaScript.

5.1 Analyse des paramètres d'URL

En utilisant urllib.parse, on peut extraire les paramètres d'une requête GET et y répondre dynamiquement.

6. Cas pratiques et extensions : multithreading et HTTPS

Pour gérer plusieurs clients simultanément, on utilise ThreadingTCPServer qui crée un nouveau thread pour chaque requête. On peut également ajouter le support HTTPS avec ssl.

6.1 Serveur multithread pour traiter plusieurs clients

La classe ThreadingTCPServer du module socketserver permet de traiter chaque requête dans un thread séparé, évitant ainsi les blocages.

6.2 Serveur HTTPS simple (auto-signé)

Pour ajouter le support SSL/TLS, on utilise le module ssl pour envelopper le socket du serveur. Cet exemple nécessite un certificat (créé avec openssl ou fourni).

 


 


Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


Leave a Reply

Your email address will not be published. Required fields are marked *