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
Чтобы удалить начало куки