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").read
fuente
URI.parse(uri_string).read
lugar, funciona tan, tan maravillosamente.VERIFY_NONE
implica? ¿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.get
es suficiente realizar una solicitud de obtención HTTPS si se pasa unahttps
URL 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
https
URL 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 failed
Fue introducido por este compromiso en Ruby 2.0.0.
El
get_response
método, que es llamado por elNet::HTTP.get
método, se establece:use_ssl
en verdadero cuandouri.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 resultados de búsqueda cuando uno busca "https ruby", he decidido responder de todos modos.
fuente
http.use_ssl = true
para forzarlo a usar ssl, y luego las cosas fueron a la perfección.esto debería verse como:
fuente