Вот код, который я могу успешно запустить.
Во-первых, ваш файл cookie - это массив, а в моем коде это должен быть массив с заменой (или хэш).Когда я запускаю код в моем реальном приложении, ответ GET_URL возвращает cookie сеанса, но ответ POST_URL возвращает другой cookie сеанса.
# initialize cookie jar as a Hash
@cookie_jar = {}
Настройте синтаксический анализ, чтобы получить имя и значение каждого файла cookie:
def merge_cookies_into_cookie_jar(response)
x = response.headers_hash['set-cookie']
case x
...
when String
x.split('; ').each{|cookie|
key,value=cookie.split('=', 2)
@cookie_jar[key]=value
}
end
end
Банку с файлом cookie необходимо преобразовать в строку:
def cookie_jar_to_s
@cookie_jar.to_a.map{|key, val| "#{key}=#{val}"}.join("; ")
end
Наконецизмените свои заголовки, чтобы использовать новый cookie_jar_to_s:
:headers => { 'Cookie' => cookie_jar_to_s }
Бонусом будет сделать cookie-файл своим собственным классом, возможно, что-то вроде этого:
class CookieJar < Hash
def to_s
self.to_a.map{|key, val| "#{key}=#{val}"}.join("; ")
end
def parse(*cookie_strings)
cookie_strings.each{|s|
s.split('; ').each{|cookie|
key,value=cookie.split('=', 2)
self.[key]=value
}
}
end
end