如何使用Ruby获取网站(url)cookie列表

时间:2018-05-31 08:15:00

标签: ruby-on-rails ruby cookies mechanize net-http

我想知道是否有一种干净的方式来获取网站(URL)使用的Cookie列表?

场景:用户写下他网站的网址,Ruby on Rails应用程序检查网站使用的所有Cookie并将其返回。现在,让我们认为这只是一个网址。

我已尝试使用下面的这些代码段,但我只回复了一个或没有Cookie:

url = 'http://www.google.com'
r = HTTParty.get(url)
puts r.request.options[:headers].inspect
puts r.code

uri = URI('https://www.google.com')
res = Net::HTTP.get_response(uri)
puts "cookies: " + res.get_fields("set-cookie").inspect
puts res.request.options[:headers]["Cookie"].inspect

或使用Mechanize gem:

agent = Mechanize.new
page = agent.get("http://www.google.com")
agent.cookies.each do |cooky| puts cooky.to_s end

它不一定是严格的Ruby代码,只是我可以添加到Ruby on Rails应用程序而不会有太多麻烦。

3 个答案:

答案 0 :(得分:1)

你应该使用Selenium-webdriver:
您将能够检索给定网站的所有Cookie:

require "selenium-webdriver"


@driver = Selenium::WebDriver.for :firefox #assuming you're using firefox

@driver.get("https://www.google.com/search?q=ruby+get+cookies+from+website&ie=utf-8&oe=utf-8&client=firefox-b-ab")

@driver.manage.all_cookies.each do |cookie|
    puts cookie[:name]
end

答案 1 :(得分:1)

 #cookie handling functions
    def add_cookie(name, value)
      @driver.manage.add_cookie(name: name, value: value)
    end

    def get_cookie(cookie_name)
      @driver.manage.cookie_named(cookie_name)
    end

    def get_all_cookies
      @driver.manage.all_cookies
    end

    def delete_cookie(cookie_name)
      @driver.manage.delete_cookie(cookie_name)
    end

    def delete_all_cookies
      @driver.manage.delete_all_cookies
    end 

答案 2 :(得分:0)

使用HTTParty,您可以这样做:

puts HTTParty.get(url).headers["set-cookie"]

将它们作为数组获取:

puts HTTParty.get(url).headers["set-cookie"].split("; ")