Ruby HTTP Library通过Facebook App获得Connection Reset [英] Ruby HTTP Library gets Connection Reset with Facebook App

查看:154
本文介绍了Ruby HTTP Library通过Facebook App获得Connection Reset的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下curl命令按预期工作:

curl'https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=myappid&client_secret= myclientsecret'

The following curl command works as expected:
curl 'https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=myappid&client_secret=myclientsecret'

我想在我的Ruby程序中做同样的事情。以下代码给出了一个错误:

I want to do the same thing in my Ruby program. The following code gives me an error:

fb_access_token_url = URI.parse(                                             
    'https://graph.facebook.com/oauth/access_token' +                        
    '?grant_type=client_credentials' +                                       
    '&client_id=' + FACEBOOK_APP_ID +                                        
    '&client_secret=' + FACEBOOK_APP_SECRET)                                 
fb_access_token = Net::HTTP.get(fb_access_token_url)                         

此代码也是如此:

fb_access_token_host = 'graph.facebook.com'                                  
fb_access_token_path_and_params = (                                          
    '/oauth/access_token' +                                                  
    '?grant_type=client_credentials' +                                       
    '&client_id=' + FACEBOOK_APP_ID +                                        
    '&client_secret=' + FACEBOOK_APP_SECRET)                                 
https_port = Net::HTTP.https_default_port()                                  

fb_access_token = Net::HTTP.get_response(fb_access_token_host,               
                                         fb_access_token_path_and_params,       
                                         https_port)

错误如下:

Errno::ECONNRESET: Connection reset by peer
/usr/lib/ruby/1.8/net/protocol.rb:135:in `sysread'
/usr/lib/ruby/1.8/net/protocol.rb:135:in `rbuf_fill'
/usr/lib/ruby/1.8/timeout.rb:67:in `timeout'
/usr/lib/ruby/1.8/timeout.rb:101:in `timeout'
/usr/lib/ruby/1.8/net/protocol.rb:134:in `rbuf_fill'
/usr/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
/usr/lib/ruby/1.8/net/protocol.rb:126:in `readline'
/usr/lib/ruby/1.8/net/http.rb:2028:in `read_status_line'
/usr/lib/ruby/1.8/net/http.rb:2017:in `read_new'
/usr/lib/ruby/1.8/net/http.rb:1051:in `request'
/usr/lib/ruby/1.8/net/http.rb:948:in `request_get'
/usr/lib/ruby/1.8/net/http.rb:380:in `get_response'
/usr/lib/ruby/1.8/net/http.rb:543:in `start'
/usr/lib/ruby/1.8/net/http.rb:379:in `get_response'
/usr/lib/ruby/1.8/net/http.rb:356:in `get'
./test-login-and-registration.rb:182:in `test_facebook_register'

我在Ubuntu 12.04上使用Ruby 1.8.7

I'm using Ruby 1.8.7 on Ubuntu 12.04

推荐答案

感谢Manoj Awasthi让我意识到有一些我无法使用的方法。

Thanks to Manoj Awasthi for making me realize that there were ssl methods that I couldn't use.

问题在于我需要net / http而不是net / https。

The problem was that I was requiring net/http rather than net/https.

工作片段:

fb_access_token_url = URI.parse(                                             
    'https://graph.facebook.com/oauth/access_token' +                        
    '?grant_type=client_credentials' +                                       
    '&client_id=' + FACEBOOK_APP_ID +                                        
    '&client_secret=' + FACEBOOK_APP_SECRET)                                 
https = Net::HTTP.new(fb_access_token_url.host, fb_access_token_url.port)    
https.use_ssl = true                                                         
https.verify_mode = OpenSSL::SSL::VERIFY_NONE                                
fb_access_token = https.request_get(fb_access_token_url.path + '?' +         
                                    fb_access_token_url.query)               

这篇关于Ruby HTTP Library通过Facebook App获得Connection Reset的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆