短縮URLは普通リダイレクトで目的のコンテンツまで辿り着く。Rubyで短縮URLで指定されたコンテンツを扱いたいが、http_clientはリダイレクトには対応しているけど、デフォルトではhttpsの短縮URLに対してhttpのURLにリダイレクトされたときに例外を吐くのでbit.lyなんかではうまく使えない。
なので、以下のように常にリダイレクトするようにコールバックを設定すると、この制限を回避できる。
require 'httpclient'
def get_content_with_redirection(url)
client = HTTPClient.new
def client.allow_all_redirection_callback(uri, res)
urify(res.header['location'][0])
end
client.redirect_uri_callback = client.method(:allow_all_redirection_callback)
client.get_content url
end
html = get_content_with_redirection("http://bit.ly/RRKD7d")
puts html
No comments:
Post a Comment