Ruby XMLRPC localhost Runtime Error : Wrong Size
Ruby XMLRPC localhost Runtime Error : Wrong Size
我正在尝试连接到 dokuwiki 网站的 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
我看过很多帖子说 Ruby 的 XMLRPC 库中存在错误。我在我的笔记本电脑上 运行ning 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]
在我的生产服务器上,我 运行ning ruby-2.1.5 [ i686 ]
我尝试了另一个库 libxml-xmlrpc,当 运行 执行相同的命令时出现以下错误:
Net::HTTPBadResponse: wrong status line: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">"
但是,同样的代码 运行ning 在我的 Windows + rubyx64 2.1.5 上的默认 ruby xmlrpc 客户端上没问题,所以我真的不明白!
Edit2 :我尝试添加
@wiki.http_header_extra = { "accept-encoding" => "identity" }
但后来我得到一个
授权失败。 HTTP 错误:401 未经授权
第一次调用 @wiki.call("dokuwiki.login", "myUsr", "myPwd")
成功了,但显然它无法验证我的身份(当然,我仍在使用 应该 工作的相同登录信息)
编辑 3
经过调查,从本地主机以外的任何其他计算机成功登录都会设置一个类似
的cookie
@cookie="DokuWiki=[small string] ; [very big string]
而如果我在本地主机上执行此操作:
我会为随机字符串写[...]
@cookie="[small string 2]=deleted; DokuWiki=[small string]; [very big string]"
所以我的 cookie 中存储了一个额外的变量信息,即“[small string 2]=deleted;
我相信这是导致我的身份验证失败的原因。有人知道这是什么吗???
所以这个本地主机连接弄乱了 cookie。显然,即使 ruby 库也不知道为什么,"Wrong size" 来自这个意外的字符串 [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
删除 cookie 的开头
我正在尝试连接到 dokuwiki 网站的 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
我看过很多帖子说 Ruby 的 XMLRPC 库中存在错误。我在我的笔记本电脑上 运行ning 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]
在我的生产服务器上,我 运行ning ruby-2.1.5 [ i686 ]
我尝试了另一个库 libxml-xmlrpc,当 运行 执行相同的命令时出现以下错误:
Net::HTTPBadResponse: wrong status line: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">"
但是,同样的代码 运行ning 在我的 Windows + rubyx64 2.1.5 上的默认 ruby xmlrpc 客户端上没问题,所以我真的不明白!
Edit2 :我尝试添加
@wiki.http_header_extra = { "accept-encoding" => "identity" }
但后来我得到一个
授权失败。 HTTP 错误:401 未经授权
第一次调用 @wiki.call("dokuwiki.login", "myUsr", "myPwd")
成功了,但显然它无法验证我的身份(当然,我仍在使用 应该 工作的相同登录信息)
编辑 3
经过调查,从本地主机以外的任何其他计算机成功登录都会设置一个类似
的cookie@cookie="DokuWiki=[small string] ; [very big string]
而如果我在本地主机上执行此操作: 我会为随机字符串写[...]
@cookie="[small string 2]=deleted; DokuWiki=[small string]; [very big string]"
所以我的 cookie 中存储了一个额外的变量信息,即“[small string 2]=deleted;
我相信这是导致我的身份验证失败的原因。有人知道这是什么吗???
所以这个本地主机连接弄乱了 cookie。显然,即使 ruby 库也不知道为什么,"Wrong size" 来自这个意外的字符串 [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
删除 cookie 的开头