Как следовать META Redirections в Rails? - PullRequest
1 голос
/ 27 ноября 2011

В настоящее время я использую следующее для отслеживания перенаправлений в URL, но оно не соответствует перенаправлениям META: (

Как я мог это сделать?

require 'logger'
require 'net/http'

class RedirectFollower
  class TooManyRedirects < StandardError; end

  attr_accessor :url, :body, :redirect_limit, :response

  def initialize(url, limit=5)
    @url, @redirect_limit = url, limit
    logger.level = Logger::INFO
  end

  def logger
    @logger ||= Logger.new(STDOUT)
  end

  def resolve
    raise TooManyRedirects if redirect_limit < 0

    self.response = Net::HTTP.get_response(URI.parse(url))

    logger.info "redirect limit: #{redirect_limit}"
    logger.info "response code: #{response.code}"
    logger.debug "response body: #{response.body}"

    if response.kind_of?(Net::HTTPRedirection)      
      self.url = redirect_url
      self.redirect_limit -= 1

      logger.info "redirect found, headed to #{url}"
      resolve
    end

    self.body = response.body
    self
  end

  def redirect_url
    if response['location'].nil?
      response.body.match(/<a href=\"([^>]+)\">/i)[1]
    else
      response['location']
    end
  end
end

1 Ответ

1 голос
/ 27 ноября 2011

Единственный способ - это фактически проанализировать содержание ответа.Вы не можете сделать это только с помощью обработки заголовков.
Итак:

Опция 1

Использование взамен Механизация , которая автоматически следует за перенаправлениямиа также мета-перенаправления, когда для follow_meta_refresh установлено значение true.

Опция 2

Используйте что-то вроде Nokogiri , чтобы вручную проанализировать фактический ответи найдите метатег таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...