2010-05-04 4 views
0

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

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

ответ

0

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

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

Так что я предполагаю, что рубин ХМЬКРС анализатор просто не в состоянии разобрать ответ. Просто теория. Попробовали ли вы другие клиенты xml-rpc?

+0

Мое понимание заключалось в том, что теги транзакций и сеансов были необязательными. Но даже если я отправил неверный запрос, не должен ли я получить какую-то ошибку? В любом случае, теперь это может быть спорным вопросом, поскольку UltraDNS рекомендует вместо этого использовать новый SOAP API. http://www.ultradns.net/api/NUS_API_XML_SOAP.pdf –

Смежные вопросы