0

在 ruby​​ 中,如果您使用 mechanize 跟随 301/302 重定向,如下所示

require 'mechanize'

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

如何获取页面机械化被重定向的列表?(如http://google.com => http://www.google.com => http://google.com.ua

好的,这是 mechanize 中负责重定向的代码

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

4

2 回答 2

2

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

需要“机械化”

需要'记录器'

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

mechanize_logger.level = 记录器::INFO

网址 = 'http://google.com'

代理 = Mechanize.new

agent.log = mechanize_logger

代理.get(url)

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

于 2012-01-20T18:56:19.563 回答
0

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

  1. 查看m.history[i].uriget() 之后的内容

  2. 你可能需要类似的东西:

    对于 0..99 中的 m.redirection_limit
      开始
        m.get(url)
        休息
        救援 WWW::Mechanize::RedirectLimitReachedError
          # 这里的代码可以控制在
          # 中间重定向级别
      结尾
    结尾
于 2009-08-29T22:02:05.453 回答