Rubyを用いてhttpsプロトコルでサイトからデータを取得する際の注意点
開発環境はWindows7 Professional(32bit) + ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]。
httpsプロトコルのYouTubeのとあるページから、データを取得して、そのデータをsampletest.txtとして保存するプログラムを作りたいと思います。
require 'open-uri' result = "" open('https://www.youtube.com/watch?v=k3KqqOlJKsQ'){|f| f.each_line{|line| result += line } } File.open('sampletest.txt','w'){|f| f.puts(result) }
これで実行すると、certificate verify failed (OpenSSL::SSL::SSLError)のようなエラーが出現するので、以下のように修正、
require 'open-uri' require 'openssl' result = "" open('https://www.youtube.com/watch?v=k3KqqOlJKsQ', :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE){|f| f.each_line{|line| result += line } } File.open('sampletest.txt','w'){|f| f.puts(result) }
いくつか方法はあるようですが、今回は証明書を検証しない方法を取っています。
これで問題なくページを保存できています。
参考リンク
library open-uri (Ruby 2.5.0)
[Ruby] open-uri の HTTPS リクエストで certificate verify failed | mofu犬blog
Rubyでファイルの書き込み・読み込みを行う方法 | UX MILK