使用 ruby 获取浏览器 cookie 列表
Getting list of browser cookies with ruby
我正在尝试使用 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 的浏览器响应 headers,但我不太清楚该怎么做。
要获取 cookie,您需要 gets
来自套接字的所有 header:
headers = []
while (line = @socket.gets) != "\r\n"
headers << line
end
这将 gets
一行文本,直到您遇到空白行。
这样,headers
变量将包含请求中所有未解析的 header。您可以在前缀为 Cookie:
.
的 header 中找到浏览器 cookie
我完成了一个玩具项目,我用纯 ruby 实现了一个 Web 服务器,你可以查看我的 http parser here。
我正在尝试使用 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 的浏览器响应 headers,但我不太清楚该怎么做。
要获取 cookie,您需要 gets
来自套接字的所有 header:
headers = []
while (line = @socket.gets) != "\r\n"
headers << line
end
这将 gets
一行文本,直到您遇到空白行。
这样,headers
变量将包含请求中所有未解析的 header。您可以在前缀为 Cookie:
.
我完成了一个玩具项目,我用纯 ruby 实现了一个 Web 服务器,你可以查看我的 http parser here。