2014-04-15 17 views
6

Sto cercando di ottenere sotto forma JSON url:EOFError (fine del file raggiunta) in Ruby on Rails con http.request

uri = URI.parse("http://84.38.185.251:9262/send") 

http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Get.new(uri.request_uri) 

response = http.request(request) 

response.code    # => 301 
response.body    # => The body (HTML, XML, blob, whatever) 
response["cache-control"] # => public, max-age=2592000 
puts response.body 

ma ottengo un errore: `EOFError (fine del file ha raggiunto): app/controllers/sensors_controller.rb: 35: in sensinfo'

sensors_controller.rb: 35:

response = http.request(request) 

Cosa ho fatto di sbagliato?

risposta

0

penso che è una sorta di bug; typhoeus sembra funzionare:

require 'typhoeus' 

response = Typhoeus.get("http://84.38.185.251:9262/send") 
p response.body 
#=> {"ids":"-1","data":{"temp":"nan","h":"-1"},"status":"255","voltage":"-1"} 
+0

Ha bisogno di altre gemme? mi dà un errore 'require ': Nessun file di questo tipo da caricare - tifo (LoadError) ma l'ho incluso nell'elenco delle gemme e make bundle install – EgorkZe

+0

No non funziona, dovrebbe funzionare bene con 'gem 'typhoeus' all'interno del' Gemfile' – mdesantis

+0

No ((non funziona (( – EgorkZe

11

questo errore per lo più ottenere per l'utilizzo di HTTPS

Se è https allora

Si prega di provare questo

uri = URI.parse("https://84.38.185.251:9262/send") 
http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Get.new(uri.request_uri) 
http.use_ssl = true 
response = http.request(request) 

Nota adizionale

http.use_ssl = true 

Se non è https

http.use_ssl = false 

oppure si può aggiungere la condizione

http.use_ssl = true if domain =~ /^https/ 

è possibile ottenere ulteriori informazioni su questo http://expressica.com/2012/02/10/eoferror-end-of-file-reached-issue-when-post-a-form-with-nethttp/

+0

no (ho provato, ma è mi mostra questo errore di nuovo – EgorkZe

+0

devo http.use_ssl impostata su true e un esplicito 'https: //' (Guardate voi stessi - il mio codice è a https://github.com/betesh/social_count/blob/v0.0.7/lib/social_count/twitter_user.rb), ma ho visto ancora questo errore una volta, con uno stacktrace che termina con 'openssl/buffering.rb: 174: in' sysread_nonblock ''chiamato da' http.request (Net :: HTTP :: Get.new (uri)) '. Sospetto che a volte la connessione si interrompa bruscamente a causa di guasti hardware/di alimentazione, quindi non c'è mai una garanzia al 100% che questo non capita, ma è solo un'ipotesi: –