2024/04/12(金)RubyのHttpClientはそろそろ捨てるべき?
2024/04/12 18:09
GitHub - nahi/httpclient: 'httpclient' gives something like the functionality of libwww-perl (LWP) in Ruby.
を使って作成していたスクレイピング的なスクリプトが動かなくなってしまった。
↓のようなエラーを吐く。
SSL_connect returned=1 errno=0 state=error: certificate verify failed (certificate has expired) (OpenSSL::SSL::SSLError)原因は、取得先のサーバーがSSL証明書をLet's Encryptに入れ替えたため。
httpclientはルート証明書がライブラリ内に同梱されており、最終更新が2015年。
Let's Encrypt系のルート証明書は未対応である。
ルート証明書がライブラリ同梱なのは今どきではないし、更新が止まっているのも痛い。
モンキーパッチがGitHub上にあるので、そちらでとりあえず対応可能。
Connection to Lets Encrypt secured server fails · Issue #445 · nahi/httpclient · GitHub
class HTTPClient alias original_initialize initialize def initialize(*args, &block) original_initialize(*args, &block) # Force use of the default system CA certs (instead of the 6 year old bundled ones) @session_manager&.ssl_config&.set_default_paths end endhttpclientは投げ捨てて、httprbを使った方が良いかも。
GitHub - httprb/http: HTTP (The Gem! a.k.a. http.rb) - a fast Ruby HTTP client with a chainable API, streaming support, and timeouts
パパっと書き換えたけど素直でかなり簡単に修正できた。
パフォーマンスも良いらしい。
なお、rubyのhttpclientでletsencryptの証明書を保有するサイトに接続できなくなった | 元祖ワシ的日記のやり方だと、Windows環境では上手くいったのだが、debian Linuxだと上手くいかなかった。
追求していない。