首页  >  文章  >  后端开发  >  How to Turn Your Device Into a Simple Server Using Python.

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

DDD
DDD原创
2024-09-23 18:15:32221浏览

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

Author: Trix Cyrus

Lets make a python server hosted from your device.

Getting Started..

make a directory named server

mkdir server

make a file named server.py

nano server.py

paste the below code.

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()

make a directory named www

mkdir www

now navigate to the www directory

cd www

make a file named index.html

nano index.html

paste the below code in it

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

Step 2: Test the Routes

After running the modified script, go to:

http://localhost:8080/ to see the home page.
http://localhost:8080/about to see the about page.
http://localhost:8080/greet?name=Trix
For any other path, the server will return a 404 error.

below is the directory structure

server/
├── server.py
└── www/
    └── index.html

Running the Server on a Remote Device

What if you want to access your Python server from another device on the same network? You can easily do this by finding the local IP address of the machine running the server and using it instead of localhost.

Step 1: Find Your IP Address

use commands like

ipconfig
ifconfig

Look for your IPv4 address (something like 192.168.x.x).

Step 2. Modify Your Server Script

In your server script, replace the line where the server is started:

with ThreadedHTTPServer(("", PORT), MyHandler) as httpd:

Change it to:

with ThreadedHTTPServer(("0.0.0.0", PORT), MyHandler) as httpd:

Step 3: Access the Server from Another Device

Now, using the IP address you found earlier, you can access the server from any device on the same network by going to http://:8080 in a browser.

And All Set

~TrixSec

以上是How to Turn Your Device Into a Simple Server Using Python.的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn