2010-09-26 16 views
12

Aquí está mi código:Ruby on Rails Net :: HTTP use_ssl tiros 'método definido'

sock = Net::HTTP.new(url.host, url.port) 
sock.use_ssl = true 
response = sock.start {|http| http.request(req)} 

aquí está el error:

undefined method `use_ssl=' for #<Net::HTTP www.paypal.com:443 open=false> 

google me está recibiendo nada!

gracias.

Respuesta

5

Esto se debe a que la función es sock.use_ssl? y devuelve un valor booleano, no es un método de configuración.

También parece que siempre devuelve falso. Se reemplaza en el paquete Net::HTTPS, que es probablemente lo que deberías usar si quieres hacer algo de SSL.

Here is the ruby doc

+0

¿tiene alguna información adicional sobre este Net :: Paquete HTTPS. la única información que puedo encontrar sugiere que el código que tengo es, de hecho, correcto para configurar Net :: HTTP para usar HTTPS ... p. ej. http://perfectionlabstips.wordpress.com/2008/11/03/how-to-open-a-https-session-in-ruby/ – Chris

+0

@Chris - Realmente no tengo más información. Si miras los documentos de ruby-library, muestran que el blog que estás leyendo es incorrecto. –

+0

¿qué es ssl de todos modos? ¿Cómo lo requiere un servidor? – Jwan622

15

require 'net/https', además de 'net/http'. Entonces se definirá use_ssl=.

require 'net/http' 
require 'net/https' 
connection = Net::HTTP::new 'www.example.com' 
connection.use_ssl = true 
+0

Eso no funciona para mí. Obtengo: 'require ': no ​​hay que cargar ese archivo - net/https (LoadError) – Jason

0

Si recibe "'require': No existe el fichero a cargar - net/HTTPS (LoadError)", entonces eso es porque no lo tiene instalado.

Si aún no lo tiene, es posible que necesite bibliotecas ssl en su servidor. Por ejemplo, en Debian/Ubuntu:

aptitude --assume-yes install libssl-dev 

Si no tienes suerte, puede que tenga que reconstruir Ruby, con soporte SSL. Si se genera manualmente, agregue --with-openssl a las opciones de configuración.

Luego hay la gema:

gem install openssl-nonblock --no-ri --no-rdoc 

Y ahora, al menos en mi experiencia, que debería funcionar ...

2

Tenga una mirada en el siguiente fragmento:

Net::HTTP.start(url.host, url.port) do |http| 
    http.use_ssl = true 
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
    http.request(req) 
end 

Necesita hacer el conjunto para use_ssl en el objeto http que no está en el objeto de solicitud. Luché con esto y encontré mi respuesta aquí: https://github.com/nicksieger/multipart-post/issues/18

1

Aquí es cómo se puede hacer una petición https get:

require "net/https" 
require "uri" 

uri = URI.parse("https://secure.com/") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

request = Net::HTTP::Get.new(uri.request_uri) 

response = http.request(request) 

fuente: http://www.rubyinside.com/nethttp-cheat-sheet-2940.html