1

我编写了一段 Ruby 代码,用于跟踪一系列潜在的重定向,直到到达最终 URL:

def self.obtain_final_url_in_chain url
  logger.debug "Following '#{url}'"
  uri = URI url
  http = Net::HTTP.start uri.host, uri.port
  response = http.request_head url 
  case response.code
  when "301"
    obtain_final_url_in_chain response['location']
  when "302"
    obtain_final_url_in_chain response['location']
  else
    url
  end
end

obtain_final_url_in_chain使用 url 调用,它最终应该返回最终的 url。

我正在尝试使用此 URL: http: //feeds.5by5.tv/master

基于http://web-sniffer.net/这应该被重定向到http://5by5.tv/rss作为 301 重定向的结果。相反,虽然我得到了http://feeds.5by5.tv/master的 404 。

上面的代码为其他 URL 返回 200(例如http://feeds.feedburner.com/5by5video)。

请问有谁知道为什么会这样?快把我逼疯了!

谢谢。

4

1 回答 1

2

根据Net::HTTP#request_head 的文档,您想要传递路径,而不是完整的 url,作为第一个参数。

有了这些和其他一些更改,这是重写方法的一种方法:

def obtain_final_url_in_chain(url)
  uri = URI url
  response = Net::HTTP.start(uri.host, uri.port) do |http|
    http.request_head uri.path
  end

  case response
  when Net::HTTPRedirection
    obtain_final_url_in_chain response['location']
  else
    url
  end
end
于 2012-10-05T04:39:55.717 回答