2012-04-12 24 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