使用Ruby的XML-RPC over SSL:到达文件末尾(EOFError)

时间:2010-05-04 16:00:09

标签: ruby ssl xml-rpc eoferror

我有一些非常简单的Ruby代码试图通过SSL进行XML-RPC:


require 'xmlrpc/client'
require 'pp'

server = XMLRPC::Client.new2("https://%s:%d/" % [ 'api.ultradns.net', 8755 ])
pp server.call2('UDNS_OpenConnection', 'sponsor', 'username', 'password')

问题是它总是导致以下EOFError异常:


/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/protocol.rb:135:in `sysread': end of file reached (EOFError)

所以看来,在做完POST之后,我什么也得不回来。有趣的是,如果我尝试在HTTPS端口上建立HTTP连接(反之亦然),这是我期望的行为,如果我更改协议,我实际上会得到相同的例外。我看过的所有内容都表明在URL中使用“https://”足以启用SSL,但我开始怀疑自己是否错过了什么。

请注意,尽管我在RPC中使用的凭据已经完成,但我希望至少可以找回XML错误页面(类似于使用Web浏览器访问https://api.ultradns.net:8755/)。我已经尝试在OSX和Linux上运行此代码,结果完全相同,所以我必须得出结论,我在这里做错了。有没有人有任何使用Ruby进行基于SSL的X​​ML-RPC的例子?

1 个答案:

答案 0 :(得分:0)

http://www.ultradns.net/api/NUS_API_XML.pdf明确指出该协议与标准XML-RPC客户端不兼容。您需要在方法调用之上添加顶级事务和会话标记。

<transaction>
  <methodCall>
     ...
  </methodCall>
</transaction>

所以我猜ruby xml-rpc解析器无法解析响应。只是一个理论。您是否尝试过其他xml-rpc客户端?