我希望能够解析 ruby 1.9.3p194(2012-04-20 修订版 35410)[x86_64-darwin10.8.0] 中的原始 cookie 字符串。
CGI::Cookie库看起来很有希望,但是,它并没有像我想象的那样工作。
例如,
CGI::Cookie::parse("ASPSESSIONIDSCDRSRTS=HHALOHOBJGJMLPIANNLDOMCJ; path=/").each_key {|name| p 'Cookie name: ' + name}
将返回:
"Cookie name: ASPSESSIONIDSCDRSRTS"
"Cookie name: path"
我想要的是类似于CGI::new
实例工作的东西,除了你向它传递一个原始的 cookie 字符串:
cookie1 = CGI::Cookie::new('name' => 'name',
'value' => ['value1', 'value2', ...],
'path' => 'path', # optional
'domain' => 'domain', # optional
'expires' => Time.now, # optional
'secure' => true # optional
)
name = cookie1.name
values = cookie1.value
path = cookie1.path
domain = cookie1.domain
expires = cookie1.expires
secure = cookie1.secure
我不知道如何从原始 cookie 字符串中雄辩地做到这一点。
编辑 - -
以下代码在~/.rvm/src/ruby-1.9.3-p194/lib/cgi/cookie.rb
文件中。所以它应该返回如下评论cookies[name] = Cookie::new(name, *values)
。我似乎没有得到。
# Parse a raw cookie string into a hash of cookie-name=>Cookie
# pairs.
#
# cookies = CGI::Cookie::parse("raw_cookie_string")
# # { "name1" => cookie1, "name2" => cookie2, ... }
#
def Cookie::parse(raw_cookie)
cookies = Hash.new([])
return cookies unless raw_cookie
raw_cookie.split(/[;,]\s?/).each do |pairs|
name, values = pairs.split('=',2)
next unless name and values
name = CGI::unescape(name)
values ||= ""
values = values.split('&').collect{|v| CGI::unescape(v,@@accept_charset) }
if cookies.has_key?(name)
values = cookies[name].value + values
end
cookies[name] = Cookie::new(name, *values)
end
cookies
end
编辑 - -
这似乎是 RubyCGI::Cookie.parse
方法中的一个错误。我已经打开了关于 Ruby 错误跟踪器的错误报告 - https://bugs.ruby-lang.org/issues/7364