Home  >  Article  >  Backend Development  >  How to Turn Your Device Into a Simple Server Using Python.

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

DDD
DDDOriginal
2024-09-23 18:15:32334browse

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

The above is the detailed content of How to Turn Your Device Into a Simple Server Using Python.. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn