2010-09-26 12 views
12

Ecco il mio codice:Ruby on Rails Net :: HTTP use_ssl tiri 'metodo undefined'

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

ecco l'errore:

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

Google mi è sempre niente!

grazie.

risposta

5

Questo perché la funzione è sock.use_ssl? e restituisce un valore booleano, non è un metodo setter.

Sembra inoltre restituire sempre false. È sovrascritto nel pacchetto Net::HTTPS, che è probabilmente quello che dovresti usare se vuoi fare qualsiasi cosa SSL.

Here is the ruby doc

+0

hai qualche ulteriori informazioni su questo Net :: Pacchetto HTTPS. l'unica informazione che posso trovare suggerisce che il codice che ho sia corretto per l'impostazione di Net :: HTTP per usare HTTPS ... e.g. http://perfectionlabstips.wordpress.com/2008/11/03/how-to-open-a-ttps-session-in-ruby/ – Chris

+0

@Chris - Non ho altre informazioni in realtà. Se guardi i documenti della ruby-library, essi mostrano che il blog che stai leggendo non è corretto. –

+0

che cos'è ssl comunque? Come lo richiede un server? – Jwan622

15

require 'net/https', oltre a 'net/http'. Quindi verrà definito use_ssl=.

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

Questo non funziona per me. Ottengo: 'require ': nessun file da caricare - net/https (LoadError) – Jason

0

Se si ottiene "` require ': Nessun file da caricare - net/HTTPS (LoadError)", allora questo è perché non lo avete installato.

Se non lo hai già fatto, potresti aver bisogno di librerie ssl sul tuo server. Ad esempio, su Debian/Ubuntu:

aptitude --assume-yes install libssl-dev 

Se siete sfortunati, potrebbe essere necessario ricostruire Ruby, con supporto SSL. Se si costruisce manualmente, aggiungere --with-openssl alle opzioni di configurazione.

Poi si passa alla gemma:

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

E ora, almeno nella mia esperienza, dovrebbe funzionare ...

2

Dai un'occhiata alla seguente frammento di codice:

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

È necessario eseguire il set per use_ssl sull'oggetto http non sull'oggetto richiesta. Ho lottato con questo e trovato la mia risposta qui: https://github.com/nicksieger/multipart-post/issues/18

1

Ecco come si può fare una richiesta 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) 

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