这几天因为个人需要,写了一个小爬虫。中间遇到一些问题。
在使用 Chrome 调试页面的时候,发现 response 头部字段中有多个"Set-Cookie"字段。 之后使用 Ruby 的 Net/Http 标准库请求后,发现打印出来的"Set-Cookie“的值却只有一个条目。
标准库的请求方法都试过了,包括获得 Net::HTTPHeader 对象后,调用 get_fields 后依然无法得到所有的值。
我 google 了一下,貌似出现多个字段的情形是允许出现的--if and only if the entire field-value for that header field is defined as a comma-separated list。 StackOverflow 上有很多个"http duplicate header"的问题,但貌似没有如何获取的问题。
想请教各位,如何获取所有的"Set-Cookie"字段?
环境参数:
代码:
require "net/http"
require "digest"
class xxx
def initialize()
@xxx_url = "www.xxx.org.cn"
@xxx_login_uri = "/Myxxx/Reader-Access.jsp?informistak=0&eventsize=WWW-044005"
@xxx_init_header = {
"Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding" => "gzip, deflate",
"Accept-Language" => "zh-CN,zh;q=0.8,zh-TW;q=0.6,en;q=0.4",
"Cache-Control" => "max-age=1",
"Connection" => "keep-alive",
"Host" => "www.xxx.org.cn",
"Referer" => "http://www.xxx.org.cn/",
"Upgrade-Insecure-Requests" => "1",
"User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
}
@xxx_login_req_uri = "/Myxxx/xxxLoginM.jsp"
@xxx_http = Net::HTTP.new(@xxx_url)
puts "===HTTP init complete!==="
visit_login_page
end
def visit_login_page()
uri = URI("http://#{@xxx_url}#{@xxx_login_uri}")
res = Net::HTTP.get_response(uri)
res.get_fields('set-cookie').each do |s|
puts s
end
end
end