rendered paste body#!/usr/bin/env python# -*- coding: UTF-8 -*-import BaseHTTPServerimport osimport sysimport urllibimport cgifrom SocketServer import ThreadingMixIn, ForkingMixIndef my_set(d, line): i = line.find('=') if i != -1: k = line[:i] v = line[i+1:] d[k] = v return True return Noneclass MyServer(ThreadingMixIn, BaseHTTPServer.HTTPServer): passclass MyServer2(ForkingMixIn, BaseHTTPServer.HTTPServer): passclass Deamon(BaseHTTPServer.BaseHTTPRequestHandler): data = {} ips = [] def check(self): if not self.client_address[0] in Deamon.ips: return None return urllib.unquote(self.path[1:]) def do_POST(self): d = self.check() if d: try: form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type']}, ) Deamon.data[d] = form['v'].value self.resp('') except Exception as e: self.resp(str(e)) def do_GET(self): d = self.check() if d: p = Deamon.data.get(d, None) if p: self.resp(p) else: self.resp('') def resp(self, s): length = len(s) self.send_response(200) self.send_header("Content-type", "text/plain") self.send_header("Content-Length", str(length)) self.end_headers() self.wfile.write(s)with open('deamon.conf', 'rt') as f: for line in f.readlines(): line = line.strip() if not my_set(Deamon.data, line): if line[0] == '+': Deamon.ips.append(line[1:]) else: port = int(line)if __name__ == "__main__": if len(sys.argv) == 2: s = { '1' : lambda: BaseHTTPServer.HTTPServer(("", port), Deamon), '2' : lambda: MyServer(("", port), Deamon), '3' : lambda: MyServer2(("", port), Deamon) }.get(sys.argv[1]) s().serve_forever() else: print("1-base, 2-threading, 3-forking")