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

DDD
Libérer: 2024-09-23 18:15:32
original
332 Les gens l'ont consulté

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
Copier après la connexion

créez un fichier nommé server.py

nano server.py
Copier après la connexion

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()
Copier après la connexion

créer un répertoire nommé www

mkdir www
Copier après la connexion

naviguez maintenant vers le répertoire www

cd www
Copier après la connexion

créez un fichier nommé index.html

nano index.html
Copier après la connexion

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>
Copier après la connexion

É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
Copier après la connexion

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
Copier après la connexion
ifconfig
Copier après la connexion

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:
Copier après la connexion

Changez-le par :

with ThreadedHTTPServer(("0.0.0.0", PORT), MyHandler) as httpd:
Copier après la connexion

É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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!