Ruby中的HTTPS请求

Soy*_*yak 16 ruby https

在Ruby中是否有用于HTTPS请求的gem或库?它叫什么,你能提供一些示例用法吗?

我要做的是打开一个页面,从中解析一些文本,然后输出它.

Eri*_*son 29

使用Ruby标准库的SSL请求

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)

使用Ruby HTTP gems的SSL请求

如果您希望使用替代方案,您可以使用以下也默认执行SSL验证的gem:

  1. EXCON

Excon是纯Ruby HTTP实现.

require 'excon'
Excon.get 'https://encrypted.google.com'
Run Code Online (Sandbox Code Playgroud)
  1. 抑制

Curb是一个使用libcurl的HTTP客户端.

require 'curl'
Curl.get 'https://encrypted.google.com'
Run Code Online (Sandbox Code Playgroud)
  1. http.rb

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)
  1. 了HTTPClient

HTTPClient是另一种纯Ruby实现.

require 'httpclient'
HTTPClient.get 'https://encrypted.google.com'
Run Code Online (Sandbox Code Playgroud)

这里列出的是HTTP库而不是HTTP包装器.像HTTPartyFaraday这样的包装器宝石要么环绕特定的HTTP实现,要么使用适配器来提供统一的HTTP接口.您可以查看Ruby HTTP客户端功能的比较矩阵.它比较了每个HTTP客户端库的功能.但请注意,自2012年以来该信息未更新.