Create httpserver
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
FROM python:3.9-alpine
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
COPY echo.py ./
|
||||
|
||||
ENTRYPOINT ["python", "./echo.py"]
|
||||
Executable
+53
@@ -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.")
|
||||
Executable
+31
@@ -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"
|
||||
Executable
+8
@@ -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"
|
||||
Reference in New Issue
Block a user