2012-10-14 10 views
15

Gibt es ein Juwel oder eine Bibliothek für HTTPS-Anfragen in Ruby? Wie heißt es und können Sie eine Beispielanwendung bereitstellen?HTTPS-Anfragen in Ruby

Was ich versuche zu tun ist eine Seite zu öffnen, etwas Text von ihm zu analysieren und dann auszugeben.

+0

Haben Sie nach http- oder https-Anfragen gefragt? Der Fragetitel stimmt nicht mit dem Text überein. –

+0

Da es sich bei allen Antworten um HTTPS handelt, habe ich die Frage zu HTTPS geändert. – Kevin

Antwort

22

SSL-Anforderung mit Ruby-Standardbibliothek

Net::HTTP in Ruby (> = 2.0.0) führt standardmäßig eine SSL-Verifizierung durch, wenn Sie ein URI-Objekt mit einer "https" -URL übergeben. Siehe https://github.com/ruby/ruby/blob/778bbac8ac2ae50f0987c4888f7158296ee5bbdd/lib/net/http.rb#L481

Sie können dies überprüfen, indem Sie eine Abrufanforderung für eine domain mit einem abgelaufenen Zertifikat ausführen.

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 anfordern Ruby HTTP gems

Wenn Sie möchten, eine Alternative verwenden, können Sie die folgenden Edelsteine ​​verwenden, die auch SSL-Überprüfung standardmäßig ausführt:

  1. Excon

Excon ist eine reine Ruby-HTTP-Implementierung.

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

Curb ist ein HTTP-Client, der Libcurl unter der Haube verwendet.

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

HTTP oder http.rb ist eine reine Implementierung Ruby-HTTP verwendet aber http_parser.rb HTTP-Anfragen und Antworten zu analysieren. Da http_parser.rb native Erweiterungen verwendet, beansprucht es eine der schnellsten HTTP-Client-Bibliotheken zu sein. Aber wie immer, nehmen Sie Benchmarks mit einem Körnchen Salz.

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

Httpclient ist eine weitere reine Ruby-Implementierung.

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

Hier sind HTTP-Bibliotheken und nicht HTTP-Wrapper aufgeführt.Wrapper-Edelsteine ​​wie HTTParty und Faraday wickeln entweder eine bestimmte HTTP-Implementierung ab oder verwenden Adapter, um eine einheitliche HTTP-Schnittstelle bereitzustellen. Sie können diese Comparison matrix of Ruby HTTP client features überprüfen. Es vergleicht die Features jeder einzelnen HTTP-Client-Bibliothek. Beachten Sie jedoch, dass die Informationen seit 2012 nicht aktualisiert werden.

+1

Ich denke, Sie Client nicht HTTP in "http = HTTPClient.new" es sollte "Client = HTTPClient.new" – Eric

+0

tatsächlich sein. Sie sind richtig, Sir. Fest. –

3

Es ist eine integrierte Bibliothek im Net::HTTP

Ein Beispiel für die Verwendung von ihm genannt Sprache wäre:

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: Sie müssen die Bibliothek wie folgt umfassen:

require 'net/https'