2012-10-14 55 views
15

Có một gem hoặc thư viện cho các yêu cầu HTTPS trong Ruby không? Nó được gọi là gì và bạn có thể cung cấp một số ví dụ về cách sử dụng không?Yêu cầu HTTPS trong Ruby

Điều tôi đang cố gắng làm là mở một trang, phân tích một số văn bản từ trang đó, sau đó xuất nó ra.

+0

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. –

+0

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

Trả lời

22

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:

  1. Excon

Excon là một triển khai Ruby HTTP thuần túy.

require 'excon' 
Excon.get 'https://encrypted.google.com' 
  1. 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' 
  1. 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' 
  1. 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ư HTTPartyFaraday 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.

+1

Tôi nghĩ rằng bạn khách hàng tiềm năng không http trong http: HTTPClient.new' nó phải là 'client = HTTPClient.new' – Eric

+0

thực sự. bạn là đúng. đã sửa. –

3

Có một thư viện tích hợp trong ngôn ngữ gọi là Net::HTTP

Một cách sử dụng ví dụ của nó sẽ là:

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 

UPDATE: Bạn cần phải bao gồm thư viện như thế này:

require 'net/https' 
Các vấn đề liên quan