Create httpserver

This commit is contained in:
Simon Warta
2022-04-13 06:57:34 +02:00
parent e5947cf650
commit b8d7db9311
6 changed files with 128 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
FROM python:3.9-alpine
WORKDIR /usr/src/app
COPY echo.py ./
ENTRYPOINT ["python", "./echo.py"]
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env python3
#pylint:disable=missing-docstring,invalid-name
import argparse
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import sys
HOST = "0.0.0.0"
def log(data):
print(data, flush=True)
class CORSRequestHandler(BaseHTTPRequestHandler):
def end_headers(self):
self.send_header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
self.send_header("Access-Control-Allow-Origin", "*")
self.send_header("Access-Control-Allow-Headers", "*")
BaseHTTPRequestHandler.end_headers(self)
def do_OPTIONS(self):
self.send_response(200)
self.end_headers()
def do_GET(self):
"""Respond to a GET request."""
if self.path == "/echo_headers":
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.send_header('Content-type', 'application/json')
self.end_headers()
body = {
"request_headers": dict(self.headers)
}
self.wfile.write(json.dumps(body, sort_keys=True).encode())
else:
self.send_response(404)
self.wfile.write("404. Try /echo_headers".encode())
def do_POST(self):
self.do_GET()
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("--port",
help="Port to listen on",
type=int,
default=5555)
args = parser.parse_args()
httpd = HTTPServer((HOST, args.port), CORSRequestHandler)
log("Starting server at {}:{}".format(HOST, args.port))
httpd.serve_forever()
log("Running now.")
+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
set -o errexit -o nounset -o pipefail
command -v shellcheck >/dev/null && shellcheck "$0"
# Please keep this in sync with the Ports overview in HACKING.md
DEFAULT_PORT_GUEST="5555"
DEFAULT_PORT_HOST="5555"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
HTTPSERVER_DIR=$(mktemp -d "${TMPDIR:-/tmp}/httpserver.XXXXXXXXX")
export HTTPSERVER_DIR
echo "HTTPSERVER_DIR = $HTTPSERVER_DIR"
IMAGE_NAME="httpserver:local"
CONTAINER_NAME="httpserver"
LOGFILE_DEFAULT="${HTTPSERVER_DIR}/httpserver_$DEFAULT_PORT_HOST.log"
docker build -t "$IMAGE_NAME" "$SCRIPT_DIR"
docker run --rm \
--user="$UID" \
--name "$CONTAINER_NAME" \
-p "$DEFAULT_PORT_HOST:$DEFAULT_PORT_GUEST" \
"$IMAGE_NAME" \
>"$LOGFILE_DEFAULT" &
# Debug start
sleep 3
cat "$LOGFILE_DEFAULT"
+8
View File
@@ -0,0 +1,8 @@
#!/bin/bash
set -o errexit -o nounset -o pipefail
command -v shellcheck >/dev/null && shellcheck "$0"
CONTAINER_NAME="httpserver"
echo "Killing socketserver containers ..."
docker container kill "$CONTAINER_NAME"