2013-09-27 85 views
0

我是ruby的新手。我有下面的代碼片段執行GET操作和檢索我的facebook羣組使用Net :: HTTP GET請求時出錯

def get_groups 
    query=("SELECT gid,name FROM group where gid in(SELECT gid from group_member where uid=me)") 
    uri=URI("https://graph.facebook.com/fql") 
    params={'q'=>query,'access_token'=>TOKEN} 
    uri.query=URI.encode_www_form(params) 
    response=Net::HTTP.get_response(uri) 
    result=json.loads(response.text) 
    return result['data'] 
end 

的名字,但是當我執行上面的代碼中,我得到了以下錯誤:

/usr/lib/ruby/1.9.1/net/protocol.rb:141:in `read_nonblock': Connection reset by peer (Errno::ECONNRESET) 
    from /usr/lib/ruby/1.9.1/net/protocol.rb:141:in `rbuf_fill' 
    from /usr/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil' 
    from /usr/lib/ruby/1.9.1/net/protocol.rb:132:in `readline' 
    from /usr/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line' 
    from /usr/lib/ruby/1.9.1/net/http.rb:2551:in `read_new' 
    from /usr/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request' 
    from /usr/lib/ruby/1.9.1/net/http.rb:1316:in `catch' 
    from /usr/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request' 
    from /usr/lib/ruby/1.9.1/net/http.rb:1293:in `request' 
    from /usr/lib/ruby/1.9.1/net/http.rb:1195:in `request_get' 
    from /usr/lib/ruby/1.9.1/net/http.rb:455:in `block in get_response' 
    from /usr/lib/ruby/1.9.1/net/http.rb:745:in `start' 
    from /usr/lib/ruby/1.9.1/net/http.rb:454:in `get_response' 
    from fb.rb:12:in `get_groups' 
    from fb.rb:32:in `<main>' 

什麼是錯誤的我在這裏做什麼?

+1

試試這個http://stackoverflow.com/questions/11369234/ruby-http-library-gets-connection-reset-with-facebook-app –

回答

2

我相信這裏的問題是您使用HTTP庫來訪問HTTPS服務。這些是根本不同的東西。下面是一個HTTPS例如:

require 'net/http' 
require 'net/https' 
http = Net::HTTP.new('www.example.com', 443) 
http.use_ssl = true 
http.ssl_version = :TLSv1 
http.ciphers = "ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:-LOW" 
http.verify_mode = OpenSSL::SSL::VERIFY_PEER 
req = Net::HTTP::Get.new('/', {'Content-Type' =>'application/json'}) 
http.start {|http| http.request(req) } 
0

看起來你有SSL證書驗證問題。嘗試關閉SSL驗證。

Net::HTTP.verify_mode = OpenSSL::SSL::VERIFY_NONE 

如果上述可以幫助您,問題的根源可能是當前的OpenSSL安裝。嘗試將其更新到最新版本。

+0

暗示有人關掉SSL證書驗證正在使互聯網成爲一個不安全的地方。 –