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

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

DDD
Release: 2024-09-23 18:15:32
Original
385 people have browsed it

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
Copy after login

make a file named server.py

nano server.py
Copy after login

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()
Copy after login

make a directory named www

mkdir www
Copy after login

now navigate to the www directory

cd www
Copy after login

make a file named index.html

nano index.html
Copy after login

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>
Copy after login

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
Copy after login

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
Copy after login
ifconfig
Copy after login

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:
Copy after login

Change it to:

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

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!

source:dev.to
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template