2013-03-31 6 views
12

यहाँ मेरी कोडरूबी https करने के लिए अनुरोध - "` read_nonblock 'में: सहकर्मी से कनेक्शन रीसेट (errno :: ECONNRESET) "

domain = 'http://www.google.com' 
url = URI.parse "https://graph.facebook.com/fql?q=SELECT%20url,normalized_url%20FROM%20link_stat%20WHERE%20url='#{domain}'" 
req = Net::HTTP::Get.new url.path 
res = Net::HTTP.start(url.host, url.port) {|http| http.request req} 
puts res.body 

है और यह मेरे

/home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:153:in `read_nonblock': Connection reset by peer (Errno::ECONNRESET) 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:153:in `rbuf_fill' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:144:in `readline' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:39:in `read_status_line' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:28:in `read_new' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1405:in `block in transport_request' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `catch' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `transport_request' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1375:in `request' 
    from /home/alex/Documents/ruby_test1.rb:20:in `block in <main>' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:851:in `start' 
    from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:582:in `start' 
    from /home/alex/Documents/ruby_test1.rb:20:in `<main>' 

मैं क्या देता है गलत करो?

+1

आपकी प्रोग्राम लाइन # 20 में कौन सा कथन है? –

+0

@iAmRubuuu, यह 'नेट :: HTTP.start' –

उत्तर

18

आपके कोड में कई विषमताएं हैं। मुख्य है: चूंकि आप SSL का उपयोग करते हैं, तो आप के साथ :use_ssl => url.scheme == 'https' के बारे में जानकारी चाहते हैं। HTTP.Get कन्स्ट्रक्टर URI के लिए इंतजार कर रहा है, पथ नहीं। संक्षेप:

domain = 'http://www.google.com' 
url = URI.parse("https://graph.facebook.com/fql?q=SELECT%20url,normalized_url%20FROM%20link_stat%20WHERE%20url='#{domain}'") 
req = Net::HTTP::Get.new url 
res = Net::HTTP.start(url.host, url.port, 
     :use_ssl => url.scheme == 'https') {|http| http.request req} 
puts res 

देता है:

#<Net::HTTPOK:0x000000027d0558> 
+3

है मेरे अनुभव में, मुझे ' नेट :: HTTP :: Get.new url' से 'नेट :: HTTP :: Get.new url को बदलना पड़ा। request_uri' (नेट :: HTTP :: कन्स्ट्रक्टर प्राप्त करें एक स्ट्रिंग की उम्मीद है, न कि uri) –

+0

@Oren_H यह रूबी संस्करण पर निर्भर करता है, मुझे लगता है। – mudasobwa

4

Accepted जवाब मुझे एक त्रुटि दे रहा था -

`initialize': no implicit conversion of Hash into String (TypeError) 

जब मैं उपयोग कर रहा था -

Net::HTTP.start(url.host, url.port, :use_ssl => url.scheme == 'https') 

मेरे रूबी संस्करण है -

arup_ruby$ ruby -v 
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin12.0] 

फिर, मैं कोड के रूप में नीचे संशोधित: -

require "uri" 
require "net/http" 

domain = 'http://www.google.com' 
uri = URI.parse("https://graph.facebook.com/fql?q=SELECT%20url,normalized_url%20FROM%20link_stat%20WHERE%20url='#{domain}'") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true if uri.scheme == 'https' 
req = Net::HTTP::Get.new uri 
res = http.start { |http| http.request req } 
puts res 
# >> #<Net::HTTPOK:0x000001018f8520> 

और यह काम किया।

संबंधित मुद्दे