Ruby中的HTTPS请求

时间:2012-10-14 15:29:30

标签: ruby https

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

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

2 个答案:

答案 0 :(得分:28)

使用Ruby标准库的SSL请求

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

使用Ruby HTTP gems的SSL请求

如果您希望使用其他选项,您可以使用以下默认执行SSL验证的宝石:

  1. Excon
  2. Excon是一个纯Ruby HTTP实现。

    require 'excon'
    Excon.get 'https://encrypted.google.com'
    
    1. Curb
    2. Curb是一个在客户端使用libcurl的HTTP客户端。

      require 'curl'
      Curl.get 'https://encrypted.google.com'
      
      1. http.rb
      2. HTTP或http.rb是纯Ruby HTTP实现,但使用http_parser.rb来解析HTTP请求和响应。由于http_parser.rb使用本机扩展,因此它声称是最快的HTTP客户端库之一。但与往常一样,采取一些盐基准。

        require 'http'
        HTTP.get 'https://encrypted.google.com'
        
        1. HTTPClient
        2. HTTPClient是另一种纯Ruby实现。

          require 'httpclient'
          HTTPClient.get 'https://encrypted.google.com'
          

          这里列出的是HTTP库而不是HTTP包装器。像HTTPartyFaraday这样的包装器宝石要么环绕特定的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'