Estoy tratando de 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 intento imprimir los resultados:
no se puede convertir URI :: HTTPS en String
¿Cual es el trato? Estoy usando Ruby 1.8.7 (OS X)

IO.copy_stream( open( url, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE } ), download_path )para deshabilitar la verificación SSL. En nuestro caso, la seguridad no fue un problema, el servidor estaba fuera de nuestro control y fue una solución temporal.Respuestas:
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").readfuente
URI.parse(uri_string).readlugar, funciona tan, tan maravillosamente.VERIFY_NONEimplica? ¿Qué debería hacerse en su lugar?require 'open-uri'para que el .read funcione.EDIT: Mi enfoque funciona, pero @ de Jason-Yeo enfoque es mucho más fácil.
A partir de 2.1.2,
elmétodo documentadopreferidoes el siguiente (citando directamente la documentación ):fuente
Net::HTTP.getes suficiente realizar una solicitud de obtención HTTPS si se pasa unahttpsURL al objeto URI . Vea mi respuesta: stackoverflow.com/a/36543895/382740 .En Ruby 2.0.0 y superior, simplemente pasar un objeto uri con una
httpsURL es suficiente para realizar una solicitud de obtención HTTPS.uri = URI('https://encrypted.google.com') Net::HTTP.get(uri)Puede verificar esto realizando una solicitud de obtención en un dominio con un certificado caducado.
uri = URI('https://expired.badssl.com/') Net::HTTP.get(uri) # OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failedFue introducido por este compromiso en Ruby 2.0.0.
El
get_responsemétodo, que es llamado por elNet::HTTP.getmétodo, se establece:use_sslen verdadero cuandouri.schemees "https".Descargo de responsabilidad: Entiendo que la pregunta es para Ruby 1.8.7, pero dado que este es uno de los primeros resultados de búsqueda cuando uno busca "https ruby", he decidido responder de todos modos.
fuente
http.use_ssl = truepara forzarlo a usar ssl, y luego las cosas fueron a la perfección.esto debería verse como:
fuente