Date created: Wednesday, May 25, 2022 7:48:48 AM. Last modified: Tuesday, January 16, 2024 3:31:35 PM

Python Web Server

A Python web server as a docker container:

FROM python:3.10-slim

ENTRYPOINT ["python3", "-m", "http.server", "-d", "/path/to/webroot/", "8000"]

 

Upload via a HTTP form:

#/usr/bin/python
#
# HTTP server with a HTML form that allows to upload files to the server.
# Files are stored in a folder named "files" inside the current directory.

from os import curdir
from os.path import join as pjoin

from http.server import BaseHTTPRequestHandler, HTTPServer

from cgi import FieldStorage


upload_form = """
<html><body>
<form enctype="multipart/form-data" method="post">
<p>File: <input type="file" name="file"></p>
<p><input type="submit" value="Upload"></p>
</form>
</body></html>
""" class StoreHandler(BaseHTTPRequestHandler): target_folder = pjoin(curdir, "files") def do_GET(self): if self.path == "/": self.display_form() def do_POST(self): if self.path == "/": form = FieldStorage( fp=self.rfile, headers=self.headers, environ={ "REQUEST_METHOD": "POST", "CONTENT_TYPE": self.headers["Content-Type"], } ) filename = form["file"].filename data = form["file"].file.read() fpath = pjoin(self.target_folder, filename) open(fpath, "wb").write(data) self.display_form() def display_form(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(upload_form.encode()) server = HTTPServer(("", 1337), StoreHandler) print("listening on 0.0.0.0:1337") server.serve_forever()

 


Previous page: Value by Reference
Next page: RegEx Examples