Как получить журнал перенаправления в Mechanize? - PullRequest
0 голосов
/ 29 августа 2009

В 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)

ОК, вот код в 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 | ставит p.uri} показывает 3 раза URI последней страницы ..

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Ключевым моментом здесь является использование встроенной регистрации в Mechanize. Вот полный пример кода с использованием встроенных средств ведения журналов Rails.

требуется «механизировать»

требуется 'logger'

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

mechanize_logger.level = Logger :: INFO

url = 'http://google.com'

агент = Mechanize.new

agent.log = mechanize_logger

agent.get (URL)

А затем проверьте вывод log / mechanize.log в каталоге журналов, и вы увидите весь процесс механизации, включая промежуточные URL.

0 голосов
/ 30 августа 2009

Я не уверен, но вот несколько вещей, которые нужно попробовать:

  1. посмотрим, что в m.history[i].uri после get ()

  2. Вам может понадобиться что-то вроде:

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...