5 # a simple XML-RPC server for Python
8 # 1999-02-01 fl added to xmlrpclib distribution
10 # written by Fredrik Lundh, January 1999.
12 # Copyright (c) 1999 by Secret Labs AB.
13 # Copyright (c) 1999 by Fredrik Lundh.
15 # fredrik@pythonware.com
16 # http://www.pythonware.com
18 # --------------------------------------------------------------------
19 # Permission to use, copy, modify, and distribute this software and
20 # its associated documentation for any purpose and without fee is
21 # hereby granted. This software is provided as is.
22 # --------------------------------------------------------------------
25 import SocketServer
, BaseHTTPServer
29 class RequestHandler(BaseHTTPServer
.BaseHTTPRequestHandler
):
34 data
= self
.rfile
.read(int(self
.headers
["content-length"]))
35 params
, method
= xmlrpclib
.loads(data
)
39 response
= self
.call(method
, params
)
40 # wrap response in a singleton tuple
41 response
= (response
,)
43 # report exception back to server
44 response
= xmlrpclib
.dumps(
45 xmlrpclib
.Fault(1, "%s:%s" % (sys
.exc_type
, sys
.exc_value
))
48 response
= xmlrpclib
.dumps(
53 # internal error, report as HTTP server error
54 self
.send_response(500)
57 # got a valid XML RPC response
58 self
.send_response(200)
59 self
.send_header("Content-type", "text/xml")
60 self
.send_header("Content-length", str(len(response
)))
62 self
.wfile
.write(response
)
64 # shut down the connection (from Skip Montanaro)
66 self
.connection
.shutdown(1)
68 def call(self
, method
, params
):
69 # override this method to implement RPC methods
70 print "CALL", method
, params
73 if __name__
== '__main__':
74 server
= SocketServer
.TCPServer(('', 8000), RequestHandler
)
75 server
.serve_forever()