著者: Trix Cyrus
デバイスからホストされる Python サーバーを作成しましょう。
はじめに..
server という名前のディレクトリを作成します
mkdir server
server.py という名前のファイルを作成します
nano server.py
以下のコードを貼り付けます。
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()
www という名前のディレクトリを作成します
mkdir www
www ディレクトリに移動します
cd www
index.html という名前のファイルを作成します
nano index.html
以下のコードを貼り付けます
<!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>
ステップ 2: ルートをテストする
変更したスクリプトを実行した後、次の場所に移動します。
http://localhost:8080/ でホームページをご覧ください。
http://localhost:8080/about についてのページをご覧ください。
http://localhost:8080/greet?name=Trix
他のパスの場合、サーバーは 404 エラーを返します。
以下はディレクトリ構造です
server/ ├── server.py └── www/ └── index.html
リモートデバイスでサーバーを実行する
同じネットワーク上の別のデバイスから Python サーバーにアクセスしたい場合はどうすればよいですか?これは、サーバーを実行しているマシンのローカル IP アドレスを見つけて、localhost の代わりに使用することで簡単に行うことができます。
ステップ 1: IP アドレスを確認する
次のようなコマンドを使用します
ipconfig
ifconfig
IPv4 アドレス (192.168.x.x など) を探します。
ステップ 2. サーバー スクリプトを変更する
サーバー スクリプトで、サーバーが起動される行を置き換えます。
with ThreadedHTTPServer(("", PORT), MyHandler) as httpd:
次のように変更します:
with ThreadedHTTPServer(("0.0.0.0", PORT), MyHandler) as httpd:
ステップ 3: 別のデバイスからサーバーにアクセスする
これで、前に見つけた IP アドレスを使用して、ブラウザで http://:8080 にアクセスし、同じネットワーク上の任意のデバイスからサーバーにアクセスできます。
これで準備完了
~TrixSec
以上がPython を使用してデバイスをシンプルなサーバーに変える方法。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。