Python を使用してデバイスをシンプルなサーバーに変える方法。

DDD
リリース: 2024-09-23 18:15:32
オリジナル
343 人が閲覧しました

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

著者: 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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!