Usando Net :: HTTP.get para una URL https

Estoy intentando usar Net::HTTP.get() para una URL https:

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

Sin embargo, obtengo el siguiente resultado cuando bash imprimir los resultados:

no puede convertir URI :: HTTPS en String

¿Cual es el trato? Estoy usando Ruby 1.8.7 (OS X)

Respuesta original:

 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) 

Como se señaló en los comentarios, esto es más elegante:

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

EDITAR: Mi enfoque funciona, pero el enfoque de @Jason-yeo es mucho más fácil.

Aparece a partir de 2.1.2 el método preferido documentado es el siguiente (citando directamente la documentación ):

HTTPS está habilitado para una conexión HTTP por # use_ssl =.

 uri = URI('https://secure.example.com/some_path?query=string') 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 

En versiones anteriores de Ruby necesitaría requerir ‘net / https’ para usar HTTPS. Esto ya no es verdad.

En Ruby 2.0.0 y superior, basta con pasar un objeto uri con una URL https para hacer una solicitud de obtención de HTTPS.

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

Puede verificar esto realizando una solicitud get en un dominio con un certificado vencido.

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

Fue introducido por este compromiso en Ruby 2.0.0.

El método get_response , que es llamado por el método Net::HTTP.get , establece :use_ssl en true cuando el uri.scheme es “https”.

Descargo de responsabilidad: entiendo que la pregunta es para Ruby 1.8.7, pero dado que este es uno de los primeros pocos resultados de búsqueda cuando uno busca “https ruby”, he decidido responder de todos modos.

esto debería verse así:

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