使用ruby获取浏览器cookie列表

时间:2016-08-05 14:32:37

标签: ruby cookies tcpserver

我尝试使用TCPServer编写一个小型ruby服务器,但无法从浏览器的响应中获取cookie列表。下面是服务器的代码 - 它将为除js以外的所有连接提供相同的html。

require 'socket'
server = TCPServer.new('localhost', 2000)

class Serveit
  def initialize(socket, content)
    @socket = socket
    @content = content
  end

  def content
    # @content
    @content = File.read('./partials/header.html.erb')
  end

  def socket
    @socket
  end

  def url
    @url = @socket.gets.split(' ')[1]
  end

  def request
    @socket.gets
  end
end

loop do
  s = Serveit.new(server.accept, rand(1..100000000).to_s)

  if s.url == "/js"
    content = File.read('app.js').to_s
    s.socket.print "HTTP/1.1 200 OK\r\n" + "Content-Type: application/javascript\r\n" + "Content-Length: #{content.bytesize}\r\n" + "Connection: close\r\n"
    s.socket.print "\r\n"
    s.socket.print content
    s.socket.close
  else
    s.socket.print "HTTP/1.1 200 OK\r\n" + "Content-Type: text/html\r\n" + "Content-Length: #{s.content.bytesize}\r\n" + "Connection: close\r\n"
    s.socket.print "\r\n"
    s.socket.print s.content
    s.socket.close
  end
end

.js文件内容是一个简单的document.cookie来设置cookie。我尝试使用CGI获取列表,但我可以管理的是在终端上提示手动插入cookie。

我的理解是你应该捕获包含cookie的浏览器响应标题,但我无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:1)

要获取所需的cookie,headers = [] while (line = @socket.gets) != "\r\n" headers << line end 来自套接字的所有标头:

gets

这将是headers一行文字,直到你输入一个空行。

这样,Cookie:变量将包含请求中所有未解析的标头。您可以在前缀为https://maps.googleapis.com/maps/api/js的标头中找到浏览器Cookie。

我完成了一个玩具项目,我用纯红宝石实现了一个Web服务器,你可以查看我的http parser here