Ruby HTTP Response 中存在重复的头部字段

tanmosquito · 2017年08月04日 · 5109 次阅读

这几天因为个人需要,写了一个小爬虫。中间遇到一些问题。

在使用 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"字段

环境参数:

  • Window 10 专业版
  • Chrome 版本 59.0.3071.115(正式版本) (64 位)
  • ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]

代码:

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

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号