Ruby 2.0p0和XMLRPC :: Client

时间:2013-03-26 15:18:53

标签: ruby xml-rpc

我遇到了Ruby 2.0p0和XMLRPC :: Client的问题。当我在2个不同版本的ruby中运行下面的代码时,我在1.9.3上获得了正确的响应,但是在2.0.0时出现了错误。谁有同样的问题?解决方案是不是使用最新版本的ruby还是有解决方法?

require "xmlrpc/client"

server = XMLRPC::Client.new2('http://api.flickr.com/services/xmlrpc/')
begin
  res = server.call('flickr.test.echo')
  puts res
rescue XMLRPC::FaultException => e
  puts e.faultCode
  puts e.faultString
end

使用 ruby​​-1.9.3-p392 [x86_64]

我从flickr得到了正确的答案,因为我没有提供API密钥:

100
Invalid API Key (Key has invalid format)

使用 ruby​​-2.0.0-p0 [x86_64]

我从ruby那里得到一个错误,说“错误的大小。是365,应该是207(RuntimeError)”

/home/luisramalho/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/xmlrpc/client.rb:506:in `do_rpc': Wrong size. Was 365, should be 207 (RuntimeError)
    from /home/luisramalho/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/xmlrpc/client.rb:281:in `call2'
    from /home/luisramalho/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/xmlrpc/client.rb:262:in `call'
    from xmlrpc.rb:5:in `<main>'

2 个答案:

答案 0 :(得分:3)

我有一个类似的问题,访问不同的xml rpc api(upcdatabase.com)(严重的是,谁还使用xml rpc apis?)和ruby2。

我的解决方案是使用与ruby默认值不同的xmlrpc库。的libxml-XMLRPC。它使用c扩展,并且应该比标准库更快,但它最后一次更新是在2008年,所以谁知道今天的声明是多么真实。

这就是我的代码最终成功的原因。

require 'xml/libxml/xmlrpc'
require 'net/http'
net = Net::HTTP.new("www.upcdatabase.com", 80)

server = XML::XMLRPC::Client.new(net, "/xmlrpc")
result = server.call('lookup', 'rpc_key' => "YOLOSWAG", 'upc' => "071160055506")

希望这有帮助。

答案 1 :(得分:2)

我为此提出了一个补丁。让我们看看团队对此的看法。

https://github.com/ruby/ruby/pull/308