Ruby 中是否有用于 HTTPS 请求的 gem 或库?它叫什么,您能提供一些示例用法吗?
我想做的是打开一个页面,从中解析一些文本,然后输出它。
最佳答案
使用 Ruby 标准库的 SSL 请求
require 'net/http'
require 'uri'
Net::HTTP.get URI('https://encrypted.google.com')
如果您传递具有“https”URL 的 URI 对象,Ruby (>= 2.0.0) 中的 Net::HTTP
默认执行 SSL 验证。参见 https://github.com/ruby/ruby/blob/778bbac8ac2ae50f0987c4888f7158296ee5bbdd/lib/net/http.rb#L481
您可以通过对 domain 执行获取请求来验证这一点证书过期。
uri = URI('https://expired.badssl.com/')
Net::HTTP.get(uri)
# OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
使用 Ruby HTTP gem 的 SSL 请求
如果您希望使用替代方案,您可以使用以下默认也执行 SSL 验证的 gem:
Excon 是纯 Ruby HTTP 实现。
require 'excon'
Excon.get 'https://encrypted.google.com'
Curb 是一个在底层使用 libcurl 的 HTTP 客户端。
require 'curl'
Curl.get 'https://encrypted.google.com'
HTTP 或 http.rb 是纯 Ruby HTTP 实现,但使用 http_parser.rb解析 HTTP 请求和响应。由于 http_parser.rb 使用 native 扩展,它声称是最快的 HTTP 客户端库之一。但一如既往,对基准测试持保留态度。
require 'http'
HTTP.get 'https://encrypted.google.com'
HTTPClient 是另一个纯 Ruby 实现。
require 'httpclient'
HTTPClient.get 'https://encrypted.google.com'
这里列出的是 HTTP 库而不是 HTTP 包装器。包装 gem ,如 HTTParty和 Faraday要么环绕特定的 HTTP 实现,要么使用适配器来提供统一的 HTTP 接口(interface)。你可以看看这个 Comparison matrix of Ruby HTTP client features .它比较了每个 HTTP 客户端库的特性。但请注意,该信息自 2012 年以来未更新。
关于ruby - Ruby 中的 HTTPS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12883650/