4

有没有一种直接的方法来设置使用 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 `<main>': undefined method `pre_connect_hooks' for nil:NilClass (NoMethodError)
4

3 回答 3

14

文档说:

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
于 2012-09-01T02:08:55.130 回答
3

您误解了您正在复制的代码。示例中有一个换行符,但它在格式中消失了,因为它没有标记为代码。$agent包含nil因为您在初始化之前尝试使用它。您必须初始化对象然后使用它。试试这个:

$agent = Mechanize.new
$agent.pre_connect_hooks << lambda { |p| p[:request]['Referer'] = 'https://wwws.mysite.com/cgi-bin/apps/Main' }
于 2012-04-12T17:53:29.920 回答
1

对于这个问题,我注意到人们似乎使用:

page = agent.get("http://www.you.com/index_login/", :referer => "http://www.you.com/")

顺便说一句,既然我测试了这个答案,看来这不是我实际问题背后的问题:每次访问我正在抓取的网站都需要再次浏览登录序列页面,甚至在第一次登录后几秒钟后 -在访问中,尽管我总是以 yaml 格式加载和保存完整的 cookie jar。但这当然会引出另一个问题。

于 2012-04-12T13:34:31.277 回答