# # XML-RPC SERVER # $Id: xmlrpcserver.py,v 1.1 2001/04/10 09:25:16 frank Exp $ # # a simple XML-RPC server for Python # # History: # 1999-02-01 fl added to xmlrpclib distribution # # written by Fredrik Lundh, January 1999. # # Copyright (c) 1999 by Secret Labs AB. # Copyright (c) 1999 by Fredrik Lundh. # # fredrik@xxxxxxxxxxxxxx # http://www.pythonware.com # # -------------------------------------------------------------------- # Permission to use, copy, modify, and distribute this software and # its associated documentation for any purpose and without fee is # hereby granted. This software is provided as is. # -------------------------------------------------------------------- # import SocketServer, BaseHTTPServer import xmlrpclib import sys class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_POST(self): try: # get arguments data = self.rfile.read(int(self.headers["content-length"])) params, method = xmlrpclib.loads(data) # generate response try: response = self.call(method, params) if type(response) != type(()): response = (response,) except: # report exception back to server response = xmlrpclib.dumps( xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)) ) else: response = xmlrpclib.dumps( response, methodresponse=1 ) except: # internal error, report as HTTP server error self.send_response(500) self.end_headers() else: # got a valid XML RPC response self.send_response(200) self.send_header("Content-type", "text/xml") self.send_header("Content-length", str(len(response))) self.end_headers() self.wfile.write(response) # shut down the connection (from Skip Montanaro) self.wfile.flush() self.connection.shutdown(1) def call(self, method, params): # override this method to implement RPC methods print "CALL", method, params return params if __name__ == '__main__': server = SocketServer.TCPServer(('', 8888), RequestHandler) server.serve_forever()