Yêu cầu SSL với Thư viện chuẩn của Ruby
require 'net/http'
require 'uri'
Net::HTTP.get URI('https://encrypted.google.com')
Net::HTTP
trong Ruby (> = 2.0.0) thực hiện xác minh SSL theo mặc định nếu bạn chuyển đối tượng URI có URL "https" vào nó. Xem https://github.com/ruby/ruby/blob/778bbac8ac2ae50f0987c4888f7158296ee5bbdd/lib/net/http.rb#L481
Bạn có thể xác minh điều này bằng cách thực hiện yêu cầu nhận trên domain bằng chứng chỉ đã hết hạn.
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 Yêu cầu với đá quý HTTP của Ruby
Nếu bạn muốn sử dụng một sự thay thế, bạn có thể sử dụng các viên ngọc sau đó cũng thực hiện xác minh SSL theo mặc định:
- Excon
Excon là một triển khai Ruby HTTP thuần túy.
require 'excon'
Excon.get 'https://encrypted.google.com'
- Curb
Curb là một khách hàng HTTP sử dụng libcurl dưới mui xe.
require 'curl'
Curl.get 'https://encrypted.google.com'
- http.rb
HTTP hoặc http.rb là một tinh khiết của Ruby HTTP thi nhưng sử dụng http_parser.rb để phân tích các yêu cầu HTTP và câu trả lời. Vì http_parser.rb sử dụng các tiện ích mở rộng gốc, nên nó tuyên bố là một trong những thư viện máy khách HTTP nhanh nhất. Nhưng như mọi khi, lấy điểm chuẩn với một hạt muối.
require 'http'
HTTP.get 'https://encrypted.google.com'
- HTTPClient
HttpClient là khác của Ruby thực hiện thuần túy.
require 'httpclient'
HTTPClient.get 'https://encrypted.google.com'
Những gì được liệt kê ở đây là thư viện HTTP chứ không phải trình bao bọc HTTP.Các đá quý bao bọc như HTTParty và Faraday hoặc quấn quanh một triển khai HTTP cụ thể hoặc sử dụng các bộ điều hợp để cung cấp một giao diện HTTP thống nhất. Bạn có thể xem số Comparison matrix of Ruby HTTP client features này. Nó so sánh các tính năng của mỗi thư viện máy khách HTTP đơn lẻ. Nhưng lưu ý rằng thông tin không được cập nhật kể từ 2012.
Nguồn
2012-10-14 15:36:05
Bạn có hỏi về các yêu cầu http hoặc https không? Tiêu đề câu hỏi không khớp với nội dung. –
Vì tất cả các câu trả lời đều là về HTTPS, tôi đã thay đổi câu hỏi để hỏi về HTTPS. – Kevin