Ruby XMLRPC localhost Ошибка времени выполнения: неправильный размер

Я пытаюсь подключиться к XMLRPC API веб-сайта докувики.

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

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

Я прочитал много сообщений о том, что в libr XMLRPC Ruby есть ошибка. На моем ноутбуке был запущен ruby ​​2.1.5pxx, а на сервере - ruby ​​1.9.xx, поэтому я сделал rvm install 2.1.5, но проблема все еще здесь

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

Что случилось?

РЕДАКТИРОВАТЬ

На моем ноутбуке я бегу 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\">"

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

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

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

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

Авторизация не удалась. Ошибка HTTP: 401 не авторизован

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

РЕДАКТИРОВАТЬ 3

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

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

Принимая во внимание, что если я сделаю это на localhost: я напишу [...] для случайных строк

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

Таким образом, у меня есть дополнительная переменная информация, хранящаяся в моем cookie, которая является "[small string 2]= удалено;

Я верю, что это делает мою аутентификацию неудачной. Кто-нибудь знает, что это такое???

1 ответ

Решение

Так что это локальное соединение испортилось с cookie. Судя по всему, даже библиотека ruby ​​не знает почему, и "Неправильный размер" происходит из этой неожиданной строки [random string]=deleted добавлено в начале файла cookie.

Если кто-то не может объяснить, ПОЧЕМУ такая строка добавлена, я приму свое решение простого добавления

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

который удаляет ошибку "Wrong size", затем

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

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

Другие вопросы по тегам