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

Ruby 如何在Mechanize中获取重定向日志?,ruby,redirect,mechanize,Ruby,Redirect,Mechanize,在ruby中,如果您使用mechanize,下面的301/302重定向如下 require 'mechanize' m = WWW::Mechanize.new m.get('http://google.com') 如何获取mechanize重定向通过的页面列表?(如=>=>) 好的,下面是mechanize中负责重定向的代码 elsif res_klass <= Net::HTTPRedirection return page unless follow_redir

在ruby中,如果您使用mechanize,下面的301/302重定向如下

require 'mechanize'

m = WWW::Mechanize.new
m.get('http://google.com')
如何获取mechanize重定向通过的页面列表?(如=>=>)

好的,下面是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
elsif res\u klass重定向\u限制
重定向动词=选项[:动词]==:头?:头:得到
page=fetch\u page(:uri=>response['Location'])。到,
:referer=>page,
:params=>[],
:动词=>重定向动词,
:重定向=>重定向+1
)
@history.push(第页,来自_uri)
返回页

但是尝试m.history.map{p|puts p.uri}显示的uri是上一页的3倍。

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

  • 查看get()后面的
    m.history[i].uri中的内容

  • 您可能需要以下内容:

  • 对于0..99中的m.u限制 开始 m、 获取(url) 打破 救援WWW::Mechanize::RedirectLimitReacheError #这里的代码可以在 #中间重定向级别 结束 结束
    这里的关键是利用内置的登录Mechanize。下面是使用内置Rails日志记录工具的完整代码示例

    需要“机械化”

    需要“记录器”

    mechanize\u logger=logger.new('log/mechanize.log')

    mechanize_logger.level=记录器::信息

    url='1〕http://google.com"

    agent=Mechanize.new

    agent.log=mechanize\u记录器

    agent.get(url)

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

    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