ruby 通过open-uri优雅地使用Kernel#open for https

34gzjxbg  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(107)

在需要open-uri之后,可以通过Kernel#open方便地从Web下载和使用文件。但是,尝试使用https执行此操作会导致root cert错误,因为ruby没有所有的root cert。
这可以通过like this来解决,但这是针对使用带有块的Net::HTTP对象。
有没有一种优雅的方法来全局地设置Net::HTTP库的use_sslca_file,以便它将应用于我的整个应用程序,以及Kernel#open之类的命令?

tzxcd3kk

tzxcd3kk1#

好吧,几个小时后,我想到了这个:

require 'open-uri'
require 'net/https'

module Net
  class HTTP
    alias_method :original_use_ssl=, :use_ssl=
    def use_ssl=(flag)
      self.ca_file = "/path/to/ca-bundle.crt"
      self.original_use_ssl = flag
    end
  end
end

字符串
更多描述如下:https://gist.github.com/996510

z4iuyo4d

z4iuyo4d2#

这可能不是对您所问问题的确切回答,但我在寻找一种用open-uri指定ca_file的方法时,最终在这里结束了。在深入研究了open-uri源代码之后,我发现可以将各种选项传递给open,其中包括一个名为ssl_ca_cert的选项。因此,要指定CA证书,您可以简单地使用以下内容:

URI.open('https://example.com/', ssl_ca_cert: '/path/to/ca-bundle.crt')

# or using older hash syntax:
URI.open('https://example.com/', :ssl_ca_cert => '/path/to/ca-bundle.crt')

字符串

相关问题