Net :: HTTP最多遵循三次重定向?

时间:2014-03-05 04:23:06

标签: ruby

我班上有这个方法:

def self.get(url)
  #TODO We could test with https too
  if url.match(/^http/)
    correct_url = url
  else
    correct_url = "http://#{url}"
  end

  uri = URI.parse(correct_url)

  if uri.respond_to? 'request_uri'
    http = Net::HTTP.new(uri.host, uri.port)
    request = Net::HTTP::Get.new(uri.request_uri)
    http.request(request)
  else
    puts "Incorrect URI"
  end
end

不幸的是,它没有遵循重定向。

有人能告诉我如何让这种方法最多允许三次重定向吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

def self.get(url)
  # TODO: test with https too
  url = "http://#{url}" unless url.match(/^http/)

  3.times do 
    uri = URI.parse(url)
    if uri.respond_to?(:request_uri)
      response = Net::HTTP.get_response(uri)
      case response.code
      when '301', '302'
        url = response.header['location']
      else
        return response
      end
    end
  end
end