2014-04-15 54 views
6

我試圖讓JSON形式網址:的EOFError(到達文件結尾)在Ruby on Rails的與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 

,但我得到一個錯誤:`的EOFError(到達文件結尾): 應用程序/控制器/ sensors_controller.rb:35:在sensinfo」

sensors_controller.rb:35:

response = http.request(request) 

我,我沒有什麼錯?

回答

0

我認爲這是一個某種類型的bug; typhoeus似乎工作:

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

是否需要要求其他寶石它給我一個錯誤'需要':。?沒有這樣的文件來加載 - 百頭巨怪(LoadError),但我把它列入到名單寶石和做捆綁安裝 – EgorkZe

+0

不,它不需要,它應該工作只是'寶石「typhoeus''罰款'Gemfile' – mdesantis

+0

無內((它不工作(( – EgorkZe

11

這個錯誤主要是讓使用HTTPS

如果是https然後

請試試這個

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) 

注aditional的

http.use_ssl = true 

如果不是https

http.use_ssl = false 

,或者你可以添加條件

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

,你可以得到更多關於這個http://expressica.com/2012/02/10/eoferror-end-of-file-reached-issue-when-post-a-form-with-nethttp/

+0

沒有(我試過,但它再次表明我這個錯誤 – EgorkZe

+0

我http.use_ssl設置爲true,而在明確的「https://」(見自己 - 我的代碼是在https://github.com/betesh/social_count/blob/v0.0.7/lib/social_count/twitter_user.rb),但仍然看到這個錯誤一次,在'的OpenSSL/buffering.rb結尾的堆棧跟蹤:174:在'sysread_nonblock 「從''叫http.request(網:: HTTP :: Get.new(URI))'。我懷疑,有時連接突然終止,由於硬件/電源故障因此從來100%的保證,這不會發生但是,這只是一個猜測 –