使用Mechanize 2.3设置自定义标头有直接的方法吗?
我尝试了former solution,但得到了:
$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)
答案 0 :(得分:10)
The docs说:
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
答案 1 :(得分:3)
你误解了你正在复制的代码。示例中有一个换行符,但它在格式化中消失了,因为它没有标记为代码。 $agent
包含nil
,因为您在初始化之前尝试使用它。您必须初始化对象然后使用它。试试这个:
$agent = Mechanize.new
$agent.pre_connect_hooks << lambda { |p| p[:request]['Referer'] = 'https://wwws.mysite.com/cgi-bin/apps/Main' }
答案 2 :(得分:2)
对于这个问题,我注意到人们似乎在使用:
page = agent.get("http://www.you.com/index_login/", :referer => "http://www.you.com/")
顺便说一句,现在我测试了这个答案,似乎这不是我实际问题背后的问题:每次访问我正在抓取的网站都需要再次浏览登录序列页面,即使是在几秒钟之后首次登录访问,尽管我总是以yaml格式加载并保存完整的cookie jar。但那当然会引出另一个问题。