Ruby中是否有用于HTTPS请求的gem或库?它叫什么,你能提供一些示例用法吗?
我要做的是打开一个页面,从中解析一些文本,然后输出它。
答案 0 :(得分:28)
require 'net/http'
require 'uri'
Net::HTTP.get URI('https://encrypted.google.com')
如果您传递一个带有“https”URL的URI对象,则Ruby中的 Net::HTTP
(> = 2.0.0)会默认执行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
如果您希望使用其他选项,您可以使用以下默认执行SSL验证的宝石:
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使用本机扩展,因此它声称是最快的HTTP客户端库之一。但与往常一样,采取一些盐基准。
require 'http'
HTTP.get 'https://encrypted.google.com'
HTTPClient是另一种纯Ruby实现。
require 'httpclient'
HTTPClient.get 'https://encrypted.google.com'
这里列出的是HTTP库而不是HTTP包装器。像HTTParty和Faraday这样的包装器宝石要么环绕特定的HTTP实现,要么使用适配器来提供统一的HTTP接口。您可以查看此Comparison matrix of Ruby HTTP client features。它比较了每个HTTP客户端库的功能。但请注意,信息自2012年以来未更新。
答案 1 :(得分:2)
有一个名为Net::HTTP
它的一个示例用法是:
uri = URI('https://example.com/some_path?query=string')
response = Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new uri.request_uri
http.request request # Net::HTTPResponse object
end
puts response.body
<强>更新强> 您需要像这样包含该库:
require 'net/https'