如何在Mechanize中获取重定向日志?

时间:2009-08-29 19:19:15

标签: ruby redirect mechanize

在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

好的,这是机械化中负责重定向的代码

 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 | puts p.uri}显示了最后一页的uri的3倍..

2 个答案:

答案 0 :(得分:2)

这里的关键是利用Mechanize中的内置日志记录。这是使用内置Rails日志记录工具的完整代码示例。

  

要求'机械化'

     

要求'logger'

     

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

     

mechanize_logger.level = Logger :: INFO

     

url ='http://google.com'

     

agent = Mechanize.new

     

agent.log = mechanize_logger

     

agent.get(URL)

然后检查日志目录中log / mechanize.log的输出,您将看到整个机械化过程,包括中间URL。

答案 1 :(得分:0)

我不确定,但这里有几件事要尝试:

  1. 在get()

  2. 之后查看m.history[i].uri中的内容
  3. 您可能需要以下内容:

  4.     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