2009-08-29 74 views
0

在Ruby中,如果使用機械化以下301/302重定向這樣如何獲得重定向登錄機械化?

require 'mechanize' 

m = WWW::Mechanize.new 
m.get('http://google.com') 

如何獲取頁面列表機械化通過重定向? (像http://google.com =>http://www.google.com =>http://google.com.ua

OK,這裏是機械化負責重定向代碼

elsif res_klass <= Net::HTTPRedirection 
     return page unless follow_redirect? 
     log.info("follow redirect to: #{ response['Location'] }") if log 
     from_uri = page.uri 
     raise RedirectLimitReachedError.new(page, redirects) if redirects + 1 > redirection_limit 
     redirect_verb = options[:verb] == :head ? :head : :get 
     page = fetch_page( :uri => response['Location'].to_s, 
          :referer => page, 
          :params => [], 
          :verb => redirect_verb, 
          :redirects => redirects + 1 
         ) 
     @history.push(page, from_uri) 
     return page 

而是試圖m.history.map {| P |把p.uri}顯示最後一頁的3倍URI ..

回答

0

我不能肯定,但這裏有幾件事情嘗試:

  1. 請參閱Get後什麼在m.history[i].uri( )

  2. 您可能需要類似:

 
    for m.redirection_limit in 0..99 
     begin 
     m.get(url) 
     break 
     rescue WWW::Mechanize::RedirectLimitReachedError 
      # code here could get control at 
      # intermediate redirection levels 
     end 
    end 
2

這裏的關鍵是利用機械化中的內置記錄。以下是使用內置Rails日誌記錄工具的完整代碼示例。

需要 '機械化'

需要 '記錄'

mechanize_logger = Logger.new( '登錄/ mechanize.log')

mechanize_logger.level =記錄器:: INFO

url ='http://google.com'

agent = Mechanize.new

agent.log = mechanize_logger

agent.get(URL)

再檢查日誌/ mechanize.log的輸出日誌的目錄,你會看到,包括整個過程機械化中間的網址。