3

JavaScriptではクロスドメインxmlrpcリクエストを使用できないため、HTTPを介したHTMLと同じドメイン上のXML-RPCサービスの両方を公開するPythonアプリを作成する必要があります。

PythonでHTTPリクエストハンドラーとSimpleXMLRPCServerを作成するのは非常に簡単ですが、どちらも別のポートでリッスンする必要があります。つまり、別のドメインを意味します。

ローカルホストの単一のポートでリッスンし、HTTPRequestHandlerとXMLRPCRequestハンドラーの両方を公開するものを作成する方法はありますか?

現在、2つの異なるサービスがあります。

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

アップデート

  • デバイスにApacheをインストールできません
  • ホストされるページは単一のhtmlページになります
  • 唯一のクライアントは、Pythonサービスがそれ自体を実行する魔女のデバイスになります
4

3 に答える 3

2

Wai Yip Tung の回答に基づいて、解決策は実際には非常に単純でした。

私がしなければならなかったことは、SimpleXMLRPCServer インスタンスを使用し続け、ハンドラーを変更することだけでした。

class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

    def do_GET(self):
          #implementation here

これにより、ハンドラーは元の POST (XML-RPC) 要求だけでなく GET 要求にも応答します。

于 2010-08-25T15:27:39.690 に答える
2

どちらも のサブクラスですSocketServer.TCPServer。サーバーインスタンスが両方にディスパッチできるように、何らかの方法でそれらをリファクタリングする必要があります。

より簡単な代替手段は、HTTPServerin front を保持し、XML RPC を SimpleXMLRPCServerインスタンスにプロキシすることです。

于 2010-08-24T22:50:10.727 に答える
0

HTTPServerコンテンツの提供に使用することはお勧めできません。Apache のような Web サーバーを使用し、Python を CGI (または のようなより高度なインターフェイスmod_wsgi) として使用する必要があります。

次に、Web サーバーは 1 つのポートで実行され、HTML を Web サーバー上で直接処理し、Python で好きなだけ CGI スクリプトを記述できます。たとえば、CGIXMLRPCRequestHandler.

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()
于 2010-08-24T21:34:33.007 に答える