Serveur HTTP en Python

Nous allons, sur une machine de la salle, lancer un programme Python qui remplira la fonction de serveur HTTP.

Ainsi, depuis n’importe quelle machine du réseau, à partir de n’importe quel navigateur web, nous pourrons afficher une page Web. :

Les ressources (fichiers) seront stockées sur le serveur et affichées sur les postes client.

 

Page HTML

Ce qui sera affiché par les navigateurs des clients est codé au format HTML.

Créer un fichier ma_page.html avec le contenu au format HTML suivant :
<html> 
  <head> 
    <title>Python HTTP</title>
  </head> 
  <body> 
    <h1>Python http.server</h1> 
    <p>Bravo ! Le serveur HTTP fonctionne !</p> 
  </body>
</html>

 

 

Programme Python

Pour créer un serveur HTTP dans Python, il faut importer deux modules :

  • http.server qui permet de gérer les requêtes HTTP
  • socketserverqui permet de créer un serveur TCP

 

import http.server
import socketserver

 

On décide du numéro de port écouté par notre serveur :

PORT = 8080

 

On choisit le gestionnaire (handler) pour les requêtes HTTP :

Handler = http.server.SimpleHTTPRequestHandler

 

On crée le serveur TCP (on utilise ici un bloc with ..., pour faciliter sa gestion – pas besoin de le fermer) :

with socketserver.TCPServer(("", PORT), Handler) as tcp_server:

 

Dans le bloc with ..., on démarre le serveur :

tcp_server.serve_forever()

 

 

Activité
  • Créer un fichier Python serveur_http.py réalisant cette fonction serveur.

Attention, les deux fichiers doivent être dans le même dossier.

 

Communication

A l’aide du navigateur saisir dans la barre d’adresse l’URL suivant :

s62-vpi.tlpu664.etab.local:8080/ma_page.html

Activité
  • Identifier dans l’URL :
    • le nom du protocole
    • le nom d’hôte
    • le port
    • la ressources
  • A l’aide du logiciel Wireshark, depuis le poste client, identifier les trames HTTP échangées pour afficher la page.

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *