【问题标题】:Combine SimpleXMLRPCServer and BaseHTTPRequestHandler in Python在 Python 中结合 SimpleXMLRPCServer 和 BaseHTTPRequestHandler
【发布时间】:2011-04-03 10:23:42
【问题描述】:

因为跨域xmlrpc请求在JavaScript中是不可能的 我需要创建一个 Python 应用程序,它通过 HTTP 和 XML-RPC 服务在同一域上公开一些 HTML。

在 python 中创建 HTTP 请求处理程序和 SimpleXMLRPCServer 非常简单, 但它们都必须监听不同的端口,这意味着不同的域。

有没有一种方法可以创建在本地主机上的单个端口上侦听的东西 并公开 HTTPRequestHandler 和 XMLRPCRequest 处理程序?

现在我有两种不同的服务:

httpServer = HTTPServer(('localhost',8001), HttpHandler);
xmlRpcServer = SimpleXMLRPCServer(('localhost',8000),requestHandler=RequestHandler)

更新

  • 我无法在设备上安装 Apache
  • 托管页面将是单个 html 页面
  • 唯一的客户端将是 python 服务自行运行的设备上的设备

【问题讨论】:

    标签: python httpserver simplexmlrpcserver


    【解决方案1】:

    解决方案其实很简单,根据伟业东的回复:

    我所要做的就是继续使用 SimpleXMLRPCServer 实例, 但修改处理程序:

    class RequestHandler(SimpleXMLRPCRequestHandler):
        rpc_paths = ('/RPC2',)
    
        def do_GET(self):
              #implementation here
    

    这将导致处理程序响应 GET 请求以及原始 POST (XML-RPC) 请求。

    【讨论】:

      【解决方案2】:

      它们都是SocketServer.TCPServer 的子类。必须有某种方式来重构它们,以便一旦服务器实例可以分派给两者。

      更简单的替代方法可能是将HTTPServer 保留在前面,并将XML RPC 代理到SimpleXMLRPCServer 实例。

      【讨论】:

      • 这帮助我找到了解决方案
      【解决方案3】:

      使用HTTPServer 提供内容不是一个好主意。您应该使用 Apache 之类的网络服务器,并将 Python 用作 CGI(或更高级的接口,例如 mod_wsgi)。

      然后,网络服务器在一个端口上运行,您可以直接在网络服务器上提供 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()
      

      【讨论】:

      • 问题是我无法在目标设备上安装 apache(作为受限制的苹果设备:p)
      猜你喜欢
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2016-02-05
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多