【问题标题】:How to use Ruby's XMLRPC::Client::new3如何使用 Ruby 的 XMLRPC::Client::new3
【发布时间】:2013-04-22 15:02:05
【问题描述】:

我正在尝试理清如何使用 XMLRPC::Client 类的 new3 方法。这就是我所拥有的:

#!/usr/bin/ruby

require "xmlrpc/client"

params = {
  host: "https://192.168.1.2",
  path: "rpc/api",
  port: "443",
  proxy_host: "",
  proxy_port: "",
  user: "username",
  password: "password",
  use_ssl: "true",
  timeout: 300,
}

session = XMLRPC::Client.new3(params)
session.instance_variable_get(:@http).instance_variable_set(:@verify_mode, OpenSSL::SSL::VERIFY_NONE)

sys_ver = session.call('api.systemVersion')
users = session.call("user.listUsers", session)

如果我使用 new2 方法,脚本将连接并返回 404 错误。但是,如果我使用 new3 它会返回

/usr/lib/ruby/1.9.1/net/http.rb:762:in `initialize': Connection refused - connect(2) (Errno::ECONNREFUSED)
    from /usr/lib/ruby/1.9.1/net/http.rb:762:in `open'
    from /usr/lib/ruby/1.9.1/net/http.rb:762:in `block in connect'
    from /usr/lib/ruby/1.9.1/timeout.rb:68:in `timeout'
    from /usr/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
    from /usr/lib/ruby/1.9.1/net/http.rb:762:in `connect'
    from /usr/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
    from /usr/lib/ruby/1.9.1/net/http.rb:750:in `start'
    from /usr/lib/ruby/1.9.1/xmlrpc/client.rb:535:in `do_rpc'
    from /usr/lib/ruby/1.9.1/xmlrpc/client.rb:420:in `call2'
    from /usr/lib/ruby/1.9.1/xmlrpc/client.rb:410:in `call'
    from sat_test.rb:24:in `<main>'

我是否正确使用了 new3 方法?

另外,如果我改用新方法,是否需要为每个参数(proxy_host=、proxy_port= 等)设置 parameter=value?

【问题讨论】:

  • 检查您拥有 XMLRPC 服务器的服务器端。正如消息所说,您无法连接服务器。所以你有网络、防火墙或服务问题恕我直言。
  • 我确实考虑过。我可以从运行脚本的计算机连接到服务器的 Web UI。我还关闭了服务器上的 iptables 以确保不会阻塞连接。
  • 另外,如果我使用 new2 方法只发送一个 URI,我会收到一个 404 错误,表明它至少正在连接到服务器。这是一个很好的测试,但不值得研究为什么它会发送该错误,因为我需要传递用户名和密码。
  • 我认为我遇到的部分问题是我需要建立一个会话然后登录它。我尝试连接的卫星服务器似乎不允许我一次完成所有操作。无论如何,这就是我得到的印象。
  • 最终,这似乎是服务器的问题。我也收到了 Perl 脚本的 404 错误。

标签: ruby xmlrpcclient


【解决方案1】:

问题似乎更多是因为我的脚本编码错误。这就是我现在拥有的:

#!/usr/bin/ruby

require "xmlrpc/client"

params = {
  host: "REDACTED",
  path: "/rpc/api",
  use_ssl: "true",
  user: "REDACTED",
  pass: "REDACTED"
}

client = XMLRPC::Client.new3(params)
client.instance_variable_get(:@http).instance_variable_set(:@verify_mode, OpenSSL::SSL::VERIFY_NONE)

session = client.call('auth.login', params[:user], params[:pass])

sys_ver = session.call('api.systemVersion', session)
users = session.call("user.listUsers", session)
users.each { |uname| puts uname }

我已经删除了 params 哈希中不必要的参数,并确保所有内容都被正确引用。

它可以工作,只是给我留下一个 404 错误,脚本的问题。但是,至少它现在连接并给了我一些东西。

【讨论】:

  • 任何最终来到这里想知道如何通过 XML-RPC 与托管的 Wordpress.com 博客交互的人,都可以使用上面的 sn-p 来使其工作。 Wordpress 301-将他们的 http 重定向到 https(至少对于某些 XML RPC 请求),因此您需要使用启用 SSL 的客户端。
猜你喜欢
  • 2013-03-16
  • 2010-11-18
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2012-03-07
  • 2011-11-21
  • 2012-03-09
相关资源
最近更新 更多