XML-RPC через SSL с Ruby: достигнут конец файла (EOFError)

У меня есть очень простой код Ruby, который пытается выполнить XML-RPC через SSL:


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 я ничего не получаю. Интересно, что именно такого поведения я ожидал бы, если бы попытался установить HTTP-соединение через порт HTTPS (или наоборот), и на самом деле я получаю точно такое же исключение, если меняю протокол. Все, на что я смотрел, указывает на то, что использования «https://» в URL-адресе достаточно для включения SSL, но я начинаю задаваться вопросом, не пропустил ли я что-то.

Обратите внимание, что даже несмотря на то, что учетные данные, которые я использую в RPC, составлены, я ожидаю, по крайней мере, вернуть страницу ошибки XML (аналогично тому, если вы заходите на https://api.ultradns.net).:8755/ в веб-браузере). Я пытался запустить этот код на OSX и Linux с одинаковым результатом, поэтому я должен сделать вывод, что я просто делаю что-то не так. Есть ли у кого-нибудь примеры использования XML-RPC через SSL с Ruby?


person Mike Conigliaro    schedule 04.05.2010    source источник


Ответы (1)


http://www.ultradns.net/api/NUS_API_XML.pdf прямо указывает, что протокол не совместим со стандартными клиентами XML-RPC. Вам нужно добавить транзакцию верхнего уровня и тег сеанса поверх вызова метода.

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

Итак, я предполагаю, что синтаксический анализатор ruby ​​xml-rpc просто не может проанализировать ответ. Просто теория. Пробовали ли вы другие клиенты xml-rpc?

person duncan    schedule 05.05.2010
comment
Насколько я понял, теги транзакции и сеанса были необязательными. Но даже если я отправил неверный запрос, разве я не должен получить обратно какую-то ошибку? В любом случае, сейчас это может быть спорным вопросом, поскольку UltraDNS вместо этого рекомендует использовать их новый API SOAP. ultradns.net/api/NUS_API_XML_SOAP.pdf - person Mike Conigliaro; 06.05.2010