Utiliser Net :: HTTP.get pour une URL https

J’essaie d’utiliser Net::HTTP.get() pour une URL https:

 @data = Net::HTTP.get(uri, Net::HTTP.https_default_port()) 

Cependant, j’obtiens le résultat suivant lorsque j’essaie d’imprimer les résultats:

ne peut pas convertir l’URI :: HTTPS en chaîne

Quel est le problème? J’utilise Ruby 1.8.7 (OS X)

Réponse originale:

 uri = URI.parse("https://example.com/some/path") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true @data = http.get(uri.request_uri) 

Comme indiqué dans les commentaires, ceci est plus élégant:

 require "open-uri" @data = URI.parse("https://example.com/some/path").read 

EDIT: Mon approche fonctionne, mais l’approche de @ jason-yeo est beaucoup plus facile.

Il semble qu’à partir de 2.1.2 la méthode documentée préférée est la suivante (en citant directement la documentation ):

HTTPS est activé pour une connexion HTTP par # use_ssl =.

 uri = URI('https://secure.example.com/some_path?query=ssortingng') Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http| request = Net::HTTP::Get.new uri response = http.request request # Net::HTTPResponse object end 

Dans les versions précédentes de Ruby, vous deviez exiger que «net / https» utilise HTTPS. Ce n’est plus vrai.

Dans Ruby 2.0.0 et versions ultérieures, il suffit de transmettre un object uri avec une URL https pour effectuer une demande d’obtention HTTPS.

 uri = URI('https://encrypted.google.com') Net::HTTP.get(uri) 

Vous pouvez vérifier cela en effectuant une demande de transfert sur un domaine avec un certificate expiré.

 uri = URI('https://expired.badssl.com/') Net::HTTP.get(uri) # OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificatee verify failed 

Il a été introduit par ce commit dans Ruby 2.0.0.

La méthode get_response , appelée par la méthode Net::HTTP.get , définit :use_ssl sur true lorsque uri.scheme est “https”.

Disclaimer: Je comprends que la question est pour Ruby 1.8.7, mais comme c’est l’un des premiers résultats de recherche quand on cherche “https ruby”, j’ai décidé de répondre quand même.

cela devrait ressembler à:

 uri.port = Net::HTTP.https_default_port() @data = Net::HTTP.get(uri)