如何使用 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!