短縮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