XML-RPC через SSL с Ruby: достигнут конец файла (EOFError) - PullRequest
0 голосов
/ 04 мая 2010

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

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

1 Ответ

0 голосов
/ 05 мая 2010

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

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

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

...