1

最終的なURLに到達するまで一連の潜在的なリダイレクトを追跡するために作成したRubyコードがあります。

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

URLを使用して呼び出すobtain_final_url_in_chainと、最終的に最終的なURLが返されます。

私はこのURLでそれを試しています:http://feeds.5by5.tv/master

http://web-sniffer.net/に基づいて、これは301リダイレクトの結果としてhttp://5by5.tv/rssにリダイレクトされる必要があります。代わりに、 http://feeds.5by5.tv/masterの404を取得します。

ただし、上記のコードは他のURLに対して200を返します(例: http: //feeds.feedburner.com/5by5video)。

なぜこれが起こっているのか誰か知っていますか?それは私を狂わせています!

ありがとう。

4

1 に答える 1

2

Net :: HTTP#request_headのドキュメントによると、最初のパラメータとして、完全なURLではなくパスを渡す必要があります。

それと他のいくつかの変更を加えて、メソッドを書き直す1つの方法を次に示します。

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 に答える