Introduction à http.server en Python
http.server
est un module intégré dans Python qui fournit des classes pour la mise en place de serveurs Web. Il peut être utilisé pour créer un serveur HTTP de base sans nécessiter d’installation de logiciels supplémentaires.
Voici un exemple simple de la façon dont vous pouvez utiliser http.server
pour démarrer un serveur HTTP :
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
httpd = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
httpd.serve_forever()
Dans cet exemple, nous avons créé une classe SimpleHTTPRequestHandler
qui hérite de BaseHTTPRequestHandler
. La méthode do_GET
est définie pour gérer les requêtes GET. Lorsqu’une requête GET est reçue, le serveur envoie une réponse HTTP 200 (OK), termine les en-têtes HTTP, et envoie un message « Hello, world! » au client.
La dernière ligne de code crée un serveur HTTP qui écoute sur le port 8000 et utilise notre SimpleHTTPRequestHandler
pour gérer les requêtes. La méthode serve_forever
démarre le serveur et commence à écouter les requêtes entrantes.
Dans les sections suivantes, nous allons approfondir comment gérer les requêtes POST et extraire le corps de ces requêtes.
Création d’un serveur HTTP simple en Python
La création d’un serveur HTTP simple en Python peut être réalisée en utilisant le module http.server
. Voici comment vous pouvez le faire :
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
httpd = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
httpd.serve_forever()
Dans cet exemple, nous avons défini une classe SimpleHTTPRequestHandler
qui hérite de BaseHTTPRequestHandler
. Nous avons ensuite défini une méthode do_GET
pour gérer les requêtes GET. Lorsqu’une requête GET est reçue, le serveur envoie une réponse HTTP 200 (OK), termine les en-têtes HTTP, et envoie un message « Hello, world! » au client.
Enfin, nous avons créé une instance de HTTPServer
qui écoute sur le port 8000 et utilise notre SimpleHTTPRequestHandler
pour gérer les requêtes. La méthode serve_forever
est appelée pour démarrer le serveur et commencer à écouter les requêtes entrantes.
Dans la section suivante, nous allons discuter de la façon de gérer les requêtes POST et d’extraire le corps de ces requêtes.
Gestion des requêtes POST
La gestion des requêtes POST est aussi simple que la gestion des requêtes GET avec le module http.server
de Python. Vous pouvez définir une méthode do_POST
dans votre gestionnaire de requêtes pour gérer les requêtes POST.
Voici un exemple de la façon dont vous pouvez le faire :
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
print(post_data)
self.send_response(200)
self.end_headers()
self.wfile.write(b'Received POST request')
httpd = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
httpd.serve_forever()
Dans cet exemple, nous avons ajouté une méthode do_POST
à notre SimpleHTTPRequestHandler
. Lorsqu’une requête POST est reçue, le serveur lit les données POST à partir du flux d’entrée (self.rfile
) en utilisant la longueur du contenu spécifiée dans l’en-tête de la requête. Les données POST sont ensuite imprimées sur la console.
Enfin, le serveur envoie une réponse HTTP 200 (OK), termine les en-têtes HTTP, et envoie un message « Received POST request » au client.
Dans la section suivante, nous allons discuter de la façon d’extraire le corps des requêtes POST.
Extraction du corps de la requête POST
L’extraction du corps d’une requête POST est une étape essentielle lors de la gestion des requêtes POST dans un serveur HTTP Python. Voici comment vous pouvez le faire :
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
print(post_data)
self.send_response(200)
self.end_headers()
self.wfile.write(b'Received POST request')
httpd = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
httpd.serve_forever()
Dans cet exemple, nous avons ajouté une méthode do_POST
à notre SimpleHTTPRequestHandler
. Lorsqu’une requête POST est reçue, le serveur lit les données POST à partir du flux d’entrée (self.rfile
) en utilisant la longueur du contenu spécifiée dans l’en-tête de la requête. Les données POST sont ensuite imprimées sur la console.
Notez que les données POST sont lues en tant que bytes, donc si vous vous attendez à du texte, vous devrez le décoder en utilisant post_data.decode('utf-8')
.
Dans la section suivante, nous allons discuter de quelques exemples de code pour illustrer ces concepts.
Exemples de code
Voici un exemple de code qui illustre comment créer un serveur HTTP simple en Python et comment gérer les requêtes POST et GET :
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
print(post_data.decode('utf-8'))
self.send_response(200)
self.end_headers()
self.wfile.write(b'Received POST request')
httpd = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
httpd.serve_forever()
Dans cet exemple, le serveur HTTP est capable de gérer à la fois les requêtes GET et POST. Pour les requêtes GET, il renvoie simplement un message « Hello, world! ». Pour les requêtes POST, il lit le corps de la requête, l’imprime sur la console, et renvoie un message « Received POST request ».
Notez que les données POST sont lues en tant que bytes, donc si vous vous attendez à du texte, vous devrez le décoder en utilisant post_data.decode('utf-8')
.
Cet exemple de code devrait vous aider à comprendre comment gérer les requêtes POST et extraire le corps de ces requêtes en utilisant le module http.server
de Python.
Conclusion
En utilisant le module http.server
de Python, nous avons pu créer un serveur HTTP simple capable de gérer les requêtes GET et POST. Nous avons également appris comment extraire le corps d’une requête POST, ce qui est une compétence essentielle lors de la création d’applications web.
Cet article a fourni une introduction à la création de serveurs HTTP en Python et à la gestion des requêtes POST. Avec ces connaissances, vous êtes maintenant équipé pour explorer davantage le développement web en Python et créer des applications plus complexes.
N’oubliez pas que la pratique est la clé pour maîtriser ces concepts. Alors, continuez à coder et à explorer !
J’espère que cet article vous a été utile et instructif. Si vous avez des questions ou des commentaires, n’hésitez pas à les partager. Bonne programmation !