python web Server 기본 (Rest,JSON)
<출처>https://mafayyaz.wordpress.com/2013/02/08/writing-simple-http-server-in-python-with-rest-and-json/
<code>from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServerfrom SocketServer import ThreadingMixInimport threadingimport argparseimport reimport cgiclass LocalData(object): records = {}class HTTPRequestHandler(BaseHTTPRequestHandler): def do_POST(self): if None != re.search('/api/v1/addrecord/*', self.path): ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) if ctype == 'application/json': length = int(self.headers.getheader('content-length')) data = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1) recordID = self.path.split('/')[-1] LocalData.records[recordID] = data print "record %s is added successfully" % recordID else: data = {} self.send_response(200) self.end_headers() else: self.send_response(403) self.send_header('Content-Type', 'application/json') self.end_headers() return def do_GET(self): if None != re.search('/api/v1/getrecord/*', self.path): recordID = self.path.split('/')[-1] if LocalData.records.has_key(recordID): self.send_response(200) self.send_header('Content-Type', 'application/json') self.end_headers() self.wfile.write(LocalData.records[recordID]) else: self.send_response(400, 'Bad Request: record does not exist') self.send_header('Content-Type', 'application/json') self.end_headers() else: self.send_response(403) self.send_header('Content-Type', 'application/json') self.end_headers() returnclass ThreadedHTTPServer(ThreadingMixIn, HTTPServer): allow_reuse_address = True def shutdown(self): self.socket.close() HTTPServer.shutdown(self)class SimpleHttpServer(): def __init__(self, ip, port): self.server = ThreadedHTTPServer((ip,port), HTTPRequestHandler) def start(self): self.server_thread = threading.Thread(target=self.server.serve_forever) self.server_thread.daemon = True self.server_thread.start() def waitForThread(self): self.server_thread.join() def addRecord(self, recordID, jsonEncodedRecord): LocalData.records[recordID] = jsonEncodedRecord def stop(self): self.server.shutdown() self.waitForThread()if __name__=='__main__': parser = argparse.ArgumentParser(description='HTTP Server') parser.add_argument('port', type=int, help='Listening port for HTTP Server') parser.add_argument('ip', help='HTTP Server IP') args = parser.parse_args() server = SimpleHttpServer(args.ip, args.port) print 'HTTP Server Running...........' server.start() server.waitForThread()</code>
댓글
댓글 쓰기