【问题标题】:XML-RPC over SSL with Ruby: end of file reached (EOFError)带有 Ruby 的基于 SSL 的 XML-RPC:到达文件末尾 (EOFError)
【发布时间】:2011-02-15 13:12:22
【问题描述】:

我有一些非常简单的 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 做 XML-RPC over SSL 的例子?

【问题讨论】:

    标签: ruby ssl xml-rpc eoferror


    【解决方案1】:

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

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

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

    【讨论】:

    • 我的理解是事务和会话标签是可选的。但是即使我发送了一个无效的请求,我不应该得到某种错误吗?无论如何,现在这可能是一个有争议的问题,因为 UltraDNS 建议使用他们的新 SOAP API。 ultradns.net/api/NUS_API_XML_SOAP.pdf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2017-02-28
    • 1970-01-01
    • 2012-09-05
    • 2017-12-29
    相关资源
    最近更新 更多