1

XMLRPC サーバーを実行しています。

#!/usr/bin/env python

from SimpleXMLRPCServer import SimpleXMLRPCServer
import subprocess
import os


def testls():
    retcode=subprocess.call(["ls", "/etc"])
    return retcode



server = SimpleXMLRPCServer(('192.168.15.20',8888),logRequests=True)

server.register_function(testls)

server.register_introspection_functions()
try:
    server.serve_forever()
finally:
    server.server_close()

Ruby クライアントから呼び出せるようにする必要があります。私が見つけたものから。それはこれであるべきだと思われます:

require xmlrpc/client
server = XMLRPC::Client.new2("http://192.168.15.20:8888/")

しかし、それはサービスに到達できないことを示唆する以下を返します。

=> #<XMLRPC::Client:0x2ab0f5caacf8 @parser=nil, @timeout=30, @path="/", @password=nil, @http_header_extra=nil, @use_ssl=false, @host="192.168.15.20", @user=nil, @proxy_port=nil, @auth=nil, @cookie=nil, @create=nil, @port=8888, @http=#<Net::HTTP 192.168.15.20:8888 open=false>, @proxy_host=nil, @http_last_response=nil>

次の方法でうまくいきましたが、メソッドを呼び出すことができませんでした。

irb(main):069:0> server = XMLRPC::Client::Proxy.new("http://192.168.15.20","8888")
=> #<XMLRPC::Client::Proxy:0x2ab0f5c4ef48 @args=[], @server="http://192.168.15.20", @meth=:call, @prefix="8888.">
irb(main):070:0> s = server.call('system.listMethods')
NoMethodError: undefined method `call' for "http://192.168.15.20":String
        from /usr/lib/ruby/1.8/xmlrpc/client.rb:608:in `send'
        from /usr/lib/ruby/1.8/xmlrpc/client.rb:608:in `method_missing'
        from (irb):70
        from :0

Ruby から Python XML-RPC サーバーへの呼び出しを呼び出す適切なコードは何ですか?

4

2 に答える 2

1

これはかなり古い質問であることは知っていますが、回答が選択されていないため、私の洞察を共有したいと思いました。

ruby では、クラスXMLRPC::Clientはサーバーへの下位レベルのインターフェースを表します。

server = XMLRPC::Client.new( "192.168.15.20", 8888 )
server.call 'system.listMethods'

このクラスXMLRPC::Client::Proxyは、より自然なサーバー メソッドの呼び出しを可能にするサーバー (の一部) への高レベル インターフェイスです。

system = server.proxy('system')
system.listMethods

同様に、サーバーの「ルート」メソッド ( register_functionPython で登録されたものなど) にアクセスするには:

main = server.proxy
main.testls
于 2014-11-28T23:28:14.457 に答える
0

Ruby の xmlrpc には詳しくありませんが、XMLRPC::Client オブジェクトを XMLRPC::Client::Proxy に渡す必要があると思います。次のようなものを試してください:

client = XMLRPC::Client.new( "http://192.168.15.20", 8888 )
server = XMLRPC::Client::Proxy.new( client, 8888 )
server.call "system.listMethods"

多分それはこのように機能します。

于 2012-05-13T12:12:07.107 に答える