3

Ruby2.0p0とXMLRPC::Clientで問題が発生しています。以下のコードを2つの異なるバージョンのrubyで実行すると、1.9.3で正しい応答が得られますが、2.0.0ではエラーが発生します。同じ問題を抱えている人はいますか?最新バージョンのルビーを使用しないという解決策ですか、それとも回避策がありますか?

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]

APIキーを指定しなかったため、flickrから正しい応答が返されます。

100
Invalid API Key (Key has invalid format)

ruby-2.0.0-p0を使用する[x86_64]

ルビーから「サイズが間違っています。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

ruby2で別のxmlrpcapi(upcdatabase.com)(真剣に、まだxml rpc apisを使用しているのは誰ですか?)にアクセスするときに同様の問題が発生しました。

私の解決策は、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 に答える