前提・実現したいこと
URLを入力し、URL先のwebページのスクリーンショットを取得するプログラムを作ろうと思います。
そこで、まずURL先のWEBページが存在するかを調べるメソッドを作成しました。
https://teratail.com/questions/125921#reply-191838
上記の質問で書いたコードが、以下になります。
ruby
1require 'net/http' 2require 'uri' 3 4def url_exist?(uri, limit = 10) 5 agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36" 6 begin 7 url = URI.parse(uri) 8 Net::HTTP.new(url.host).get({"User-Agent": agent}) 9 rescue 10 return false 11 else 12 return true 13 end 14end 15 16puts url_exist?("http://www.nogizaka46.com/") 17puts url_exist?("https://www.amazon.co.jp/")
これはあくまで、ページが存在しているかどうかを調べるもので、それに関しては大方問題なく動きました。
発生している問題・エラーメッセージ
上のコードで、てっきりUser-Agentの設定がうまくいったのかと思ったのですが、そうではなかったようです。
ruby
1puts Net::HTTP.new(url.host).get({"User-Agent": agent})
としてみると、結果は
#<Net::HTTPBadRequest:0x00007fffbdbfd910>
となり、User-Agentがよろしくないようです。
また、以下のコードも試してみました。
ruby
1require 'net/http' 2 3agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36" 4 5Net::HTTP.version_1_2 6Net::HTTP.start('https://www.amazon.co.jp/', 80) { |http| 7 response = http.get({"User-Agent": agent}) 8 response.body 9}
結果は以下です。
Traceback (most recent call last): 8: from url_html.rb:6:in `<main>' 7: from /home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/net/http.rb:609:in `start' 6: from /home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/net/http.rb:909:in `start' 5: from /home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/net/http.rb:920:in `do_start' 4: from /home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/net/http.rb:935:in `connect' 3: from /home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/timeout.rb:103:in `timeout' 2: from /home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/timeout.rb:93:in `block in timeout' 1: from /home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/net/http.rb:936:in `block in connect' /home/user/.rbenv/versions/2.5.1/lib/ruby/2.5.0/net/http.rb:939:in `rescue in block in connect': Failed to open TCP connection to https://www.amazon.co.jp/:80 (getaddrinfo: Name or service not known) (SocketError)
恐らく、User-Agentの設定が間違えているのか?と思うのですが、どうも不足が見つかりません。
ご回答、アドバイスをいただけると幸いです。
補足情報(FW/ツールのバージョンなど)
- windows10
- windows subsystem for linux(ubuntu)
- ruby 2.5.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/13 11:01
退会済みユーザー
2018/05/13 12:42