前提・実現したいこと
引数にURLを渡すと、そのWEBページが存在するかどうかを真偽値で返すメソッドを作ろうと思っています。
http://piko.hateblo.jp/entry/2013/05/24/194739
上のページで、以下のようなコードを見つけたので試してみました。
ruby
1def url_request(url, limit = 10) 2 if limit == 0 3 return false 4 end 5 begin 6 response = Net::HTTP.get_response(URI.parse(url)) 7 rescue 8 return false 9 else 10 case response 11 when Net::HTTPSuccess 12 return true 13 when Net::HTTPRedirection 14 url_request(response['location'], limit - 1) 15 else 16 return false 17 end 18 end 19end 20 21puts url_request("http://www.nogizaka46.com/")
発生している問題・エラーメッセージ
大好きな乃木坂46のサイト(http://www.nogizaka46.com/)で試してみたところ、結果が"false"となってしまいました。
しかし、例えばamazon(https://www.amazon.co.jp/)ではちゃんと"true"が返ってきます。
こういった場合、何が原因で、どのように対応したらいいのでしょうか?
補足情報(FW/ツールのバージョンなど)
- windows10
- windows subsystem for linux(ubuntu)
- ruby 2.5.1
ご回答、アドバイスをいただけると幸いです。
追記
otnさんのアドバイスを参考にして、メソッドを以下に書き換えてみました!
ruby
1def url_exist?(uri) 2 agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36" 3 url = URI.parse(uri) 4 begin 5 Net::HTTP.new(url.host).get({"User-Agent": agent}) 6 rescue 7 return false 8 else 9 return true 10 end 11end 12 13# 存在するページ 14puts url_exist?("http://www.nogizaka46.com/") 15 16# 存在しないページ 17puts url_exist?("http://www.nogizaka46aaa.com/")
とすると、結果がうまく出力されました!
true false
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/13 06:03
退会済みユーザー
2018/05/13 07:40
2018/05/13 10:58
2018/05/13 11:22