2012-04-12 29 views
3

是否有直接的方式来设置自定义标题与机械2.3?如何在使用Ruby机械化加载页面之前设置Referer头?

我尝试了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

没有什么错的问题本身,这是一个有效的,所以我kep它。甚至为其他人发布了一个答案,他们会陷入同样的​​困境。另一个问题仅仅是掩盖了我似乎面临的机械化的实际问题。但在这里与此无关。 – Marcos 2012-04-12 16:22:05

回答

2

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

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

顺便说一句,现在我测试了这个答案,似乎这是不是我的实际问题背后的问题:每次访问我正在抓取的网站时,都需要在第一次登录访问后几秒钟再次访问登录序列页面,尽管我总是加载并保存完整的Cookie罐子在yaml格式。但这当然会导致另一个问题。

3

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

$agent = Mechanize.new 
$agent.pre_connect_hooks << lambda { |p| p[:request]['Referer'] = 'https://wwws.mysite.com/cgi-bin/apps/Main' } 
+0

好的通知,谢谢! – Marcos 2012-04-15 17:19:38

9

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