ruby - Ruby 中的 HTTPS 请求

标签 ruby https

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:

  1. Excon

Excon 是纯 Ruby HTTP 实现。

require 'excon'
Excon.get 'https://encrypted.google.com'
  1. Curb

Curb 是一个在底层使用 libcurl 的 HTTP 客户端。

require 'curl'
Curl.get 'https://encrypted.google.com'
  1. http.rb

HTTP 或 http.rb 是纯 Ruby HTTP 实现,但使用 http_parser.rb解析 HTTP 请求和响应。由于 http_parser.rb 使用 native 扩展,它声称是最快的 HTTP 客户端库之一。但一如既往,对基准测试持保留态度。

require 'http'
HTTP.get 'https://encrypted.google.com'
  1. HTTPClient

HTTPClient 是另一个纯 Ruby 实现。

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

这里列出的是 HTTP 库而不是 HTTP 包装器。包装 gem ,如 HTTPartyFaraday要么环绕特定的 HTTP 实现,要么使用适配器来提供统一的 HTTP 接口(interface)。你可以看看这个 Comparison matrix of Ruby HTTP client features .它比较了每个 HTTP 客户端库的特性。但请注意,该信息自 2012 年以来未更新

关于ruby - Ruby 中的 HTTPS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12883650/

相关文章:

internet-explorer - 如何在安全页面上查看不安全的项目

c# - 将 HTTPS 页面上的 URL 重写为 HTTP

ruby - AWS Elastic Beanstalk - 如何将现有环境从 Ruby 2.1 升级到 Ruby 2.2

javascript - Ruby - Watir - 使用解释的 js 获取 HTML

ruby-on-rails - 由于无效选项 : --include-dependencies,Rails 安装失败

ruby - 为什么在 Ruby 中可以将字符串与 int 和 block 相乘作为闭包?

node.js - NodeJS 加密的 HTTPS 响应体

使用 instance_eval 改进 Ruby

java - 无法使用 java 连接到 HTTPS url

docker - Nginx 代理管理器 502 Bad Gateway 错误仅在 https 模式下