17

RubyにHTTPSリクエスト用のgemまたはライブラリはありますか?それは何と呼ばれ、いくつかの使用例を提供できますか?

私がやろうとしているのは、ページを開き、そこからテキストを解析してから出力することです。

4

2 に答える 2

32

Ruby 標準ライブラリを使用した SSL リクエスト

require 'net/http'
require 'uri'
Net::HTTP.get URI('https://encrypted.google.com')

Net::HTTPRuby (>= 2.0.0) では、"https" URL を持つ URI オブジェクトを渡すと、デフォルトで SSL 検証が実行されます。https://github.com/ruby/ruby/blob/778bbac8ac2ae50f0987c4888f7158296ee5bbdd/lib/net/http.rb#L481を参照してください。

これは、期限切れの証明書を持つドメインで取得リクエストを実行することで確認できます。

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 は純粋な Ruby HTTP 実装です。

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

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 はネイティブ拡張機能を使用しているため、最速の HTTP クライアント ライブラリの 1 つとされています。ただし、いつものように、ベンチマークは大まかに考えてください。

require 'http'
HTTP.get 'https://encrypted.google.com'
  1. HTTP クライアント

HTTPClient は、もう 1 つの純粋な Ruby 実装です。

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

ここにリストされているのは HTTP ライブラリであり、HTTP ラッパーではありません。HTTPartyFaradayなどのラッパー gemは、特定の HTTP 実装をラップするか、アダプターを使用して統一された HTTP インターフェースを提供します。このRuby HTTP クライアント機能の比較マトリックス を確認してください。そこにあるすべての HTTP クライアント ライブラリの機能を比較します。ただし、情報は 2012 年以降更新されていないことに注意してください。

于 2012-10-14T15:36:05.677 に答える
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'
于 2012-10-14T15:33:00.080 に答える