Python을 사용하여 장치를 간단한 서버로 전환하는 방법

DDD
풀어 주다: 2024-09-23 18:15:32
원래의
343명이 탐색했습니다.

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

작가: 트릭스 사이러스

당신의 기기에서 호스팅되는 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=트릭스
다른 경로의 경우 서버는 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

으로 이동하여 동일한 네트워크에 있는 모든 장치에서 서버에 액세스할 수 있습니다.

그리고 모든 설정

~트릭스섹

위 내용은 Python을 사용하여 장치를 간단한 서버로 전환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!