在需要open-uri之后,可以通过Kernel#open方便地从Web下载和使用文件。但是,尝试使用https执行此操作会导致root cert错误,因为ruby没有所有的root cert。这可以通过like this来解决,但这是针对使用带有块的Net::HTTP对象。有没有一种优雅的方法来全局地设置Net::HTTP库的use_ssl和ca_file,以便它将应用于我的整个应用程序,以及Kernel#open之类的命令?
open-uri
Kernel#open
Net::HTTP
use_ssl
ca_file
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
z4iuyo4d2#
这可能不是对您所问问题的确切回答,但我在寻找一种用open-uri指定ca_file的方法时,最终在这里结束了。在深入研究了open-uri源代码之后,我发现可以将各种选项传递给open,其中包括一个名为ssl_ca_cert的选项。因此,要指定CA证书,您可以简单地使用以下内容:
open
ssl_ca_cert
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')
字符串
2条答案
按热度按时间tzxcd3kk1#
好吧,几个小时后,我想到了这个:
字符串
更多描述如下:https://gist.github.com/996510
z4iuyo4d2#
这可能不是对您所问问题的确切回答,但我在寻找一种用
open-uri
指定ca_file
的方法时,最终在这里结束了。在深入研究了open-uri
源代码之后,我发现可以将各种选项传递给open
,其中包括一个名为ssl_ca_cert
的选项。因此,要指定CA证书,您可以简单地使用以下内容:字符串