Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
381 views
in Technique[技术] by (71.8m points)

ruby - How to get redirect log in Mechanize?

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

require 'mechanize'

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

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

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The key here is to take advantage of the built in logging in Mechanize. Here's a full code sample using the built in Rails logging facilities.

require 'mechanize'

require '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)

And then check the output of log/mechanize.log in your log directory and you'll see the whole mechanize process including the intermediate urls.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...