Maison  >  Article  >  développement back-end  >  Comment transformer votre appareil en un simple serveur à l'aide de Python.

Comment transformer votre appareil en un simple serveur à l'aide de Python.

DDD
DDDoriginal
2024-09-23 18:15:32359parcourir

How to Turn Your Device Into a Simple Server Using Python.

Auteur : Trix Cyrus

Créons un serveur Python hébergé à partir de votre appareil.

Démarrage..

créer un répertoire nommé serveur

mkdir server

créez un fichier nommé server.py

nano server.py

collez le code ci-dessous.

import http.server
import socketserver
import logging
import os
import threading
from urllib.parse import urlparse, parse_qs

PORT = 8080
DIRECTORY = "www"  

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')

class MyHandler(http.server.SimpleHTTPRequestHandler):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory=DIRECTORY, **kwargs)

    def log_message(self, format, *args):
        logging.info("%s - %s" % (self.client_address[0], format % args))

    def do_GET(self):
        parsed_path = urlparse(self.path)
        query = parse_qs(parsed_path.query)

        # Custom logic for different routes
        if parsed_path.path == '/':
            self.serve_file("index.html")
        elif parsed_path.path == '/about':
            self.respond_with_text("<h1>About Us</h1><p>This is a custom Python server.</p>")
        elif parsed_path.path == '/greet':
            name = query.get('name', ['stranger'])[0]
            self.respond_with_text(f"<h1>Hello, {name}!</h1>")
        else:
            self.send_error(404, "File Not Found")

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        logging.info("Received POST data: %s", post_data.decode('utf-8'))
        self.respond_with_text("<h1>POST request received</h1>")

    def serve_file(self, filename):
        if os.path.exists(os.path.join(DIRECTORY, filename)):
            self.send_response(200)
            self.send_header("Content-type", "text/html")
            self.end_headers()
            with open(os.path.join(DIRECTORY, filename), 'rb') as file:
                self.wfile.write(file.read())
        else:
            self.send_error(404, "File Not Found")

    def respond_with_text(self, content):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write(content.encode('utf-8'))

class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
    daemon_threads = True  # Handle requests in separate threads

def run_server():
    try:
        with ThreadedHTTPServer(("", PORT), MyHandler) as httpd:
            logging.info(f"Serving HTTP on port {PORT}")
            logging.info(f"Serving files from directory: {DIRECTORY}")
            httpd.serve_forever()
    except Exception as e:
        logging.error(f"Error starting server: {e}")
    except KeyboardInterrupt:
        logging.info("Server stopped by user")

if __name__ == "__main__":
    server_thread = threading.Thread(target=run_server)
    server_thread.start()

    server_thread.join()

créer un répertoire nommé www

mkdir www

naviguez maintenant vers le répertoire www

cd www

créez un fichier nommé index.html

nano index.html

collez-y le code ci-dessous

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Python Simple Server</title>
</head>
<body>
    <h1>Welcome to My Python Server!</h1>
    <p>This is a simple web server running on your local device.</p>
</body>
</html>

Étape 2 : tester les itinéraires

Après avoir exécuté le script modifié, accédez à :

http://localhost:8080/ pour voir la page d'accueil.
http://localhost:8080/about pour voir la page à propos.
http://localhost:8080/greet?name=Trix
Pour tout autre chemin, le serveur renverra une erreur 404.

vous trouverez ci-dessous la structure des répertoires

server/
├── server.py
└── www/
    └── index.html

Exécuter le serveur sur un appareil distant

Et si vous souhaitez accéder à votre serveur Python depuis un autre appareil sur le même réseau ? Vous pouvez facilement le faire en recherchant l'adresse IP locale de la machine exécutant le serveur et en l'utilisant à la place de localhost.

Étape 1 : Trouvez votre adresse IP

utilisez des commandes comme

ipconfig
ifconfig

Recherchez votre adresse IPv4 (quelque chose comme 192.168.x.x).

Étape 2. Modifiez votre script de serveur

Dans votre script serveur, remplacez la ligne où le serveur est démarré :

with ThreadedHTTPServer(("", PORT), MyHandler) as httpd:

Changez-le par :

with ThreadedHTTPServer(("0.0.0.0", PORT), MyHandler) as httpd:

Étape 3 : accéder au serveur depuis un autre appareil

Maintenant, en utilisant l'adresse IP que vous avez trouvée précédemment, vous pouvez accéder au serveur depuis n'importe quel appareil sur le même réseau en accédant à http://:8080 dans un navigateur.

Et tout est prêt

~TrixSec

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn