3

我遇到了 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>'
4

2 回答 2

3

我在使用 ruby​​2 访问不同的 xml rpc api(upcdatabase.com's)时遇到了类似的问题(说真的,谁还在使用 xml rpc api?)。

我的解决方案是使用与 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")

希望这可以帮助。

于 2013-03-30T04:46:47.990 回答
2

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

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

于 2013-05-16T09:35:51.203 回答