2011-06-14 12 views
5

para hacer un Net :: HTTP HTTPS petición, sin la forma de bloque se puede hacer esto:Solicitud de HTTPS usando el formulario de bloqueo de Net :: HTTP - ¿es posible?

... 
http = Net::HTTP.new(url.host, url.port) 
http.use_ssl = true 
... 

pero hay una manera de saber Net :: HTTP para utilizar https cuando se hace la forma de bloque?

u = URI.parse(url) 
Net::HTTP.start(u.host, u.port) do |http| 
    # if I put http.use_ssl = true here, ruby complains that this can't 
    # be done becuase the sesion has already started 
    resp = http.get(u.request_uri) 
end 

Estoy en ruby ​​1.8.7

Respuesta

17

Consulte la documentación de Net::HTTP.start que tiene un hash opcional. De la documentación:

opt establece los siguientes valores por su acceso. Las claves son ca_file, ca_path, cert, cert_store, ciphers, close_on_empty_response, key, open_timeout, read_timeout, ssl_timeout, ssl_version, use_ssl, verify_callback, verify_depth y verify_mode. Si establece: use_ssl como verdadero, puede usar https y el valor predeterminado de verify_mode se establece como OpenSSL :: SSL :: VERIFY_PEER.

Net::HTTP.start(url.host, url.port, :use_ssl => true) 
+0

se olvidó de mencionar, estoy en [1.8.7] (http://rubydoc.info/stdlib/net/1.8.7/Net/HTTP.start) –

+0

@ John A continuación, puede no lo hagas Ruby 1.8.7 no tiene firmas de método para esto. Lamentablemente, no podrá usar el formulario de bloque si desea establecer 'use_ssl'. Por supuesto, puede parchar la versión 1.9.2 de inicio en: https://gist.github.com/2cdc187fa0c7b608fe2c –

+0

Ohhh, dulce :-D –

Cuestiones relacionadas