由于跨域xmlrpc请求在JavaScript中是不可能的,所以我需要创建一个Python,它通过HTTP公开一些服务。
在python中创建HTTP请求处理程序和SimpleXMLRPCServer非常容易,但它们都必须在不同的端口上侦听,这意味着不同的域。
是否有一种方法可以在本地主机上的单个端口上侦听并同时公开HTTPRequestHandler和XMLRPCRequest处理程序?
现在我有两种不同的服务:
httpServer = HTTPServer(('localhost',8001), HttpHandler);
xmlRpcServer = SimpleXMLRPCServer(('localhost',8000),requestHandler=RequestHandler)更新
。
发布于 2010-08-25 15:27:39
解决办法其实很简单,基于韦业东的答覆:
我所要做的就是继续使用SimpleXMLRPCServer实例,但是修改处理程序:
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)
def do_GET(self):
#implementation here这将导致处理程序响应GET请求以及原始POST (XML)请求。
发布于 2010-08-24 22:50:10
它们都是SocketServer.TCPServer的子类。必须有某种方法来重构它们,以便一旦服务器实例可以分派给两者。
一个更容易的选择可能是将HTTPServer保持在前面,而代理XML则保持在SimpleXMLRPCServer实例的前面。
发布于 2010-08-24 21:34:33
使用HTTPServer提供内容不是一个好主意。您应该使用像Apache这样的CGI服务器,并使用Python作为CGI(或者像mod_wsgi这样更高级的接口)。
然后,you服务器运行在一个端口上,您可以直接在you服务器上服务器HTML,用Python编写任意数量的CGI脚本,例如使用CGIXMLRPCRequestHandler编写XMLRPC请求。
class MyFuncs:
def div(self, x, y) : return x // y
handler = CGIXMLRPCRequestHandler()
handler.register_function(pow)
handler.register_function(lambda x,y: x+y, 'add')
handler.register_introspection_functions()
handler.register_instance(MyFuncs())
handler.handle_request()https://stackoverflow.com/questions/3561140
复制相似问题