2010-05-04 54 views
0

我有试图通过SSL做XML-RPC一些很简单的Ruby代码:XML-RPC在使用Ruby SSL:到达文件结尾(的EOFError)


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进行XML-RPC的例子?

回答

0

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

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

所以我猜ruby xml-rpc解析器只是不能解析响应。只是一个理论。有你尝试过的其他xml-rpc客户端?

+0

我的理解是,交易和会话标签是可选的。但即使我发送了无效请求,我是否也不应该得到某种错误?无论如何,现在它可能是一个有争议的问题,因为UltraDNS建议使用他们的新SOAP API。 http://www.ultradns.net/api/NUS_API_XML_SOAP.pdf – 2010-05-06 15:27:34

相关问题