Skip to content

Instantly share code, notes, and snippets.

@tomazas
Last active January 25, 2022 09:43
Show Gist options
  • Save tomazas/7b323554b601e8d606ae5069c3fa58a1 to your computer and use it in GitHub Desktop.
Save tomazas/7b323554b601e8d606ae5069c3fa58a1 to your computer and use it in GitHub Desktop.
Python 3 multi-threaded HTTP server implementing GET & POST on port 8080
# Python 3 multi-threaded HTTP server implementing GET & POST on port 8080
# Tested using Python 3.10.1
# run using below run.sh bash script:
'''
#!/bin/bash
nohup /usr/bin/python -u http_server.py > server.log 2>&1 &
echo $! > pid
'''
# stop using below stop.sh bash script:
'''
#!/bin/bash
kill -9 `cat pid`
rm pid
'''
import http.server
from http.server import ThreadingHTTPServer
import socketserver
import sys
# config
hostName = "0.0.0.0"
serverPort = 8080
payload = "<html><head></head><body><h2>%s<br/>Server node reached successfully</h2></body></html>"
class Handler(http.server.BaseHTTPRequestHandler):
def setup(self):
self.timeout = 2 # socket read timeout in seconds
http.server.BaseHTTPRequestHandler.setup(self)
def respond(self, title):
self.sys_version = "1.0"
self.server_version = "HTTPS Server" # preven python version leak
self.close_connection = True # ensure threads close the socket
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(str.encode(payload%title))
def do_GET(self):
self.respond("HTTP GET")
def do_POST(self):
content_len = int(self.headers.get('Content-Length', 0))
post_body = self.rfile.read(content_len)
self.respond("HTTP POST")
print("starting %s:%d"%(hostName, serverPort))
httpd = ThreadingHTTPServer((hostName, serverPort), Handler)
httpd.serve_forever()
print("done")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment