Ruby - ウェブスクレイピング - certified


クラウディア 


1. 概要
2. 開いてみる
3. VERIFY_NONE してみる
4. 参考サイト

1. 概要

 よく理解していないのですが・・・。  「https」のサイトを通常のオープンで開こうとするとエラーになるのだ。  参考サイトを読むと証明書の場所を自前で定義してそこに証明書を配置するか、証明書のチェックを行わないようにするしかなさそうです。  いささか古い記事を読むと「net/https」を使うようなことを書いていますが、Ruby のマニュアルを読むと「net/https」は 1.9.2 で「net/http」にマージされているようです。  でまぁ「net/http」も使い方がよ~わからんのです。  で「open-uri」のまま使える、参考サイトがあって、わたしには、それが一番使いやすそうです。

2. 開いてみる

 実際、どういう現象かと言うと。

#!/usr/bin/env ruby

=begin

URI をオープンしてみる

=end

require('open-uri')

begin
  uri = URI.encode('https://freebsd.sing.ne.jp/')
  uri = URI.parse(uri)

  html = open(uri).read
rescue => error
  puts("例外発生[#{error.class}]")

  error.backtrace_locations.each do | line |
    puts("#{line}")
  end

  puts("[#{self.class.name}][#{error.message}]")
end
 てなソースを実行すると。

例外発生[OpenSSL::SSL::SSLError]
/usr/local/lib/ruby/2.4/net/protocol.rb:44:in `connect_nonblock'
/usr/local/lib/ruby/2.4/net/protocol.rb:44:in `ssl_socket_connect'
/usr/local/lib/ruby/2.4/net/http.rb:948:in `connect'
/usr/local/lib/ruby/2.4/net/http.rb:887:in `do_start'
/usr/local/lib/ruby/2.4/net/http.rb:876:in `start'
/usr/local/lib/ruby/2.4/open-uri.rb:323:in `open_http'
/usr/local/lib/ruby/2.4/open-uri.rb:741:in `buffer_open'
/usr/local/lib/ruby/2.4/open-uri.rb:212:in `block in open_loop'
/usr/local/lib/ruby/2.4/open-uri.rb:210:in `catch'
/usr/local/lib/ruby/2.4/open-uri.rb:210:in `open_loop'
/usr/local/lib/ruby/2.4/open-uri.rb:151:in `open_uri'
/usr/local/lib/ruby/2.4/open-uri.rb:721:in `open'
/usr/local/lib/ruby/2.4/open-uri.rb:31:in `open'
../open/open_uri.rb:15:in `<main>'
[Object][SSL_connect returned=1 errno=0 state=error: certificate verify failed]
 ということになるのです。

3. VERIFY_NONE してみる

 参考サイトに習って。
#!/usr/bin/env ruby

=begin

URI をオープンしてみる

=end

require('pry')
require('open-uri')
require('openssl')

begin
  OpenSSL::SSL.module_eval{ remove_const(:VERIFY_PEER) }
  OpenSSL::SSL.const_set( :VERIFY_PEER, OpenSSL::SSL::VERIFY_NONE )

  uri = URI.encode('https://freebsd.sing.ne.jp/')
  uri = URI.parse(uri)

  html = open(uri).read
rescue => error
  puts("例外発生[#{error.class}]")

  error.backtrace_locations.each do | line |
    puts("#{line}")
  end

  puts("[#{self.class.name}][#{error.message}]")
end



 というソースを書いてみました。  これはエラーが発生しませんでしたので、これでいこうと思います。

4. 参考サイト

 本ページは、下記のサイトを参考にさせていただきました。
Windows 上の Ruby で SSL 接続時に certificate verify failed が出る場合の対処」
「Ruby の https 通信で ... とりあえず動かしたいとき。」
「Ruby 2.5.0 リファレンスマニュアル > ライブラリ一覧 > net/https ライブラリ 」
「Ruby 2.5.0 リファレンスマニュアル > ライブラリ一覧 > net/http ライブラリ 」
「open-uri の HTTPS リクエストで certificate verify failed 

audiobook.jp
AbemaTV 無料体験
earthcar(アースカー)
Amazonギフトカード
5G CONNECT
健康サポート特集
EaseUS
損保との違い
JETBOY
ベルリッツ
【usus ウズウズ】
ハイスピードプラン
ネットオークションの相場、統計、価格比較といえばオークファン
それがだいじWi-Fi
EMEET 1
TikTok Shop 【リピート用プログラム】
サウンドハウス
アフィリエイトのアクセストレード
葬送のフリーレン Prime Video
薬屋の独り言
U-NEXT