如何在Mechanize中获取重定向日志? [英] How to get redirect log in Mechanize?

查看:103
本文介绍了如何在Mechanize中获取重定向日志?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在ruby中,如果您使用机械化遵循以下301/302重定向

In ruby, if you use mechanize following 301/302 redirects like this

require 'mechanize'

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

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

how to get the list of the pages mechanize was redirected through? (Like http://google.com => http://www.google.com => http://google.com.ua)

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

OK, here is the code in mechanize responsible for redirection

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

but trying to m.history.map {|p| puts p.uri} shows 3 times the uri of last page..

推荐答案

我不确定,但是您可以尝试以下几种方法:

I'm not certain, but here are a couple of things to try:

  1. 在get()

  1. see what's in m.history[i].uri after the get()

您可能需要类似的东西:

You might need something like:


    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

这篇关于如何在Mechanize中获取重定向日志?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆