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'
我想在我的Ruby程序中做同样的事情。 以下代码给出了一个错误:
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
感谢Manoj Awasthi让我意识到有一些我无法使用的方法。
问题是我需要net / http而不是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)
- Omniauth-facebook哈希没有显示Facebook’用户名’字段,使用rails 3
- 让用户使用Facebook登录或创建帐户
- omniauth with rails:获取facebook用户的信息
- 使用Omniauth和Rails 3在Facebook登录时在Web和触摸界面之间切换
- 使用像facebook这样的omniauth提供程序时,Devise不会正确地重定向到存储位置
- Rails facebook app返回422“你想要的改变被拒绝”错误
- 在Ruby / Sinatra中解码Facebook签名的请求
- Facebooker扩展了权限?
- Facebook的Javascript SDK可以与旧的Facebook API一起使用吗?