2015-02-27 2 views
2

Я пытаюсь подключиться к XMLRPC API веб-сайта dokuwiki.Ruby XMLRPC localhost Runtime Ошибка: неправильный размер

Я успешно делает, что из моего собственного ноутбука, с подключением SSL, однако, когда я пытаюсь сделать это с моего рабочего сервера (который проходит как вики и приложение рельсы, из которого выполняется код рубин), я бегу в

Runtime Error 

Wrong size. Was 163, should be 113 

Вот как я инициализировать соединение:

@wiki = ::XMLRPC::Client.new3( 
     host: "wiki.example.com", 
     path: "/lib/exe/xmlrpc.php", 
     use_ssl: true) 
     # Temp Hack because SSL Fails 
     @wiki.instance_variable_get(:@http).instance_variable_set(:@verify_mode, OpenSSL::SSL::VERIFY_NONE) 
    end 
    @authenticated = false 
    authenticate! 
    end 

    def authenticate! 
    # Fails at below line : 
    @authenticated = @wiki.call("dokuwiki.login", ENV['WIKI_USER'], ENV['WIKI_PASSWORD']) 
    Rails.logger.info (@authenticated ? "Authenticated on Wiki !" : "Authentication failed on wiki !") 
    end 

Я прочитал много сообщений о том, что есть ошибка в XMLRPC Lib Руби. Я рубиновый 2.1.5pxx на моем ноутбуке, и рубиновый 1.9.xx на моем сервере, так что я сделал rvm install 2.1.5, но проблема все еще здесь

(кстати, я предположил, что это было достаточно, чтобы сделать rvm use 2.1.5, а затем touch restart к перезагрузите мой сервер rails, но как я могу проверить, какая версия рубина используется?)

Что не так?

EDIT

На моем ноутбуке, я бегу ruby 2.1.5p273 (2014-11-13 revision 48405) [x64-mingw32]

На моем сервере производства, я бегу ruby-2.1.5 [ i686 ]

Я попробовал другую библиотеку, Libxml-XMLRPC, и я получаю следующее ошибка при работе с той же командой:

Net::HTTPBadResponse: wrong status line: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">" 

Но ag ain, тот же код работает нормально с клиентом ruby ​​xmlrpc по умолчанию на моем Windows + rubyx64 2.1.5, поэтому я действительно не понимаю его!

Edit2: Я пытался добавить

@wiki.http_header_extra = { "accept-encoding" => "identity" } 

Но тогда я получаю

Ошибка авторизации. HTTP-Error: 401 Несанкционированное

Первый вызов @wiki.call("dokuwiki.login", "myUsr", "myPwd") работал, но, видимо, не удалось проверить подлинность меня (Конечно, я до сих пор используют ту же регистрационную информацию, которая должна работа)

EDIT 3

После расследования, успешно Войти с любым другим компьютера, чем локальный хост будет устанавливать кук как

@cookie="DokuWiki=[small string] ; [very big string] 

Если я делаю это на локальном хосте: Я напишу [...] Для случайных строк

@cookie="[small string 2]=deleted; DokuWiki=[small string]; [very big string]" 

Так у меня есть дополнительная переменная информация хранится в моем печенье, которое является «[струнным 2] = удалена;.

Я считаю, что это то, что делает сбой моего аутентификации Любой знает, что это такое?

ответ

0

Так что это соединение с localhost было испорчено с помощью файла cookie. По-видимому, даже рубиновая библиотека не знает почему, а «Неверный размер» исходит из этой неожиданной строки [random string]=deleted, добавленной в начале печенья.

Если кто-то не может объяснить, почему добавляется такая строка, я принимаю мое решение простое добавление

@wiki.http_header_extra = { "accept-encoding" => "identity" } 

который удаляет «Неправильный размер» ошибка, то

if /deleted/.match(@wiki.cookie) 
    @wiki.cookie = @wiki.cookie.gsub(/.*deleted; /, '') 
end 

Чтобы удалить начало печенье

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

  • Нет связанных вопросов^_^