我遇到了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>'
答案 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)
我为此提出了一个补丁。让我们看看团队对此的看法。