Skip to content

Instantly share code, notes, and snippets.

@randerzander
Created March 13, 2018 02:32
Show Gist options
  • Save randerzander/28732498670d254064bb71037dfb3536 to your computer and use it in GitHub Desktop.
Save randerzander/28732498670d254064bb71037dfb3536 to your computer and use it in GitHub Desktop.
Simple Python3 webserver with custom POST handler
import sys, os, cgi, _thread
from http.server import SimpleHTTPRequestHandler, HTTPServer
class MyServer(SimpleHTTPRequestHandler):
#Custom POST handler that saves POSTed file content to local disk
def do_POST(self):
post_env = {
'REQUEST_METHOD': 'POST',
'CONTENT_TYPE': self.headers['Content-Type'],
}
form = cgi.FieldStorage(fp=self.rfile, headers=self.headers, environ=post_env)
if 'file' in form: _thread.start_new_thread(save_file, (form['file'],))
content_len = int(self.headers['Content-Length'])
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.send_header('Content-length', 0)
self.end_headers()
self.wfile.write(''.encode('utf-8'))
#Threaded function
def save_file(f):
with open(f.filename, 'wb') as fp: fp.write(f.file.read())
print('Saved ' + f.filename)
if __name__ == "__main__":
PORT = int(sys.argv[1])
HOSTNAME = '0.0.0.0'
server = HTTPServer((HOSTNAME, PORT), MyServer)
try:
server.serve_forever()
except KeyboardInterrupt:
pass
server.server_close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment