如何在使用Ruby mechanize加载页面之前设置Referer标头?
有没有一种直接的方法来使用Mechanize 2.3设置自定义标头?
我试过以前的解决方案,但得到:
$agent = Mechanize.new $agent.pre_connect_hooks << lambda { |p| p[:request]['Referer'] = 'https://wwws.mysite.com/cgi-bin/apps/Main' } # ./mech.rb:30:in `': undefined method `pre_connect_hooks' for nil:NilClass (NoMethodError)
文档说:
get(uri, parameters = [], referer = nil, headers = {}) { |page| ... }
例如:
agent.get 'http://www.google.com/', [], agent.page.uri, {'foo' => 'bar'}
或者你可能会喜欢:
agent.request_headers = {'foo' => 'bar'} agent.get url
你误解了你正在复制的代码。 示例中有一个换行符,但它在格式化中消失了,因为它没有标记为代码。 $agent
包含nil
因为您在初始化之前尝试使用它。 您必须初始化对象然后使用它。 试试这个:
$agent = Mechanize.new $agent.pre_connect_hooks << lambda { |p| p[:request]['Referer'] = 'https://wwws.mysite.com/cgi-bin/apps/Main' }
对于这个问题,我注意到人们似乎使用:
page = agent.get("http://www.you.com/index_login/", :referer => "http://www.you.com/")
顺便说一句,现在我测试了这个答案,似乎这不是我实际问题背后的问题:每次访问我正在抓取的网站都需要再次浏览登录序列页面,即使在第一次登录后几秒钟 – 在访问中,尽管我总是以yaml格式加载并保存完整的cookiejar。 但这会导致另一个问题。