Eri*_*son 29
require 'net/http'
require 'uri'
Net::HTTP.get URI('https://encrypted.google.com')
Run Code Online (Sandbox Code Playgroud)
Net::HTTP在Ruby(> = 2.0.0)中,如果您传递一个具有"https"URL的URI对象,则默认情况下会执行SSL验证.请参阅https://github.com/ruby/ruby/blob/778bbac8ac2ae50f0987c4888f7158296ee5bbdd/lib/net/http.rb#L481
您可以通过在具有过期证书的域上执行get请求来验证这一点.
uri = URI('https://expired.badssl.com/')
Net::HTTP.get(uri)
# OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
Run Code Online (Sandbox Code Playgroud)
如果您希望使用替代方案,您可以使用以下也默认执行SSL验证的gem:
Excon是纯Ruby HTTP实现.
require 'excon'
Excon.get 'https://encrypted.google.com'
Run Code Online (Sandbox Code Playgroud)
Curb是一个使用libcurl的HTTP客户端.
require 'curl'
Curl.get 'https://encrypted.google.com'
Run Code Online (Sandbox Code Playgroud)
HTTP或http.rb是纯Ruby HTTP实现,但使用http_parser.rb来解析HTTP请求和响应.由于http_parser.rb使用本机扩展,因此它声称是最快的HTTP客户端库之一.但与往常一样,采取一系列基准测试.
require 'http'
HTTP.get 'https://encrypted.google.com'
Run Code Online (Sandbox Code Playgroud)
HTTPClient是另一种纯Ruby实现.
require 'httpclient'
HTTPClient.get 'https://encrypted.google.com'
Run Code Online (Sandbox Code Playgroud)
这里列出的是HTTP库而不是HTTP包装器.像HTTParty和Faraday这样的包装器宝石要么环绕特定的HTTP实现,要么使用适配器来提供统一的HTTP接口.您可以查看Ruby HTTP客户端功能的比较矩阵.它比较了每个HTTP客户端库的功能.但请注意,自2012年以来该信息未更新.