2013-04-10 59 views
7

OAuth舞蹈的其中一个步骤涉及将通过回调接收到的代码交换为访问令牌。具体地,对于Facebook服务器端身份验证,下面的HTTPS GET请求返回存取码在响应体:node.js https.get()引发错误ECONNREFUSED

https.get(/**String | Object*/ options, function (res) { 
    res.setEncoding('utf8'); 

    res.on('data', function (data) { 
    // parse response body 
    }); 

}).on('error',function (e) { 
     Log.w(TAG, "Error requesting access_token", e); 
}).end(); 

错误是:

https://graph.facebook.com/oauth/access_token? 
    client_id=YOUR_APP_ID 
    &redirect_uri=YOUR_REDIRECT_URI 
    &client_secret=YOUR_APP_SECRET 
    &code=CODE_GENERATED_BY_FACEBOOK 

Node.js的尝试因此连接时触发一个错误:

{ code: 'ECONNREFUSED', 
    errno: 'ECONNREFUSED', 
    syscall: 'connect' } 

该调用适用于wget/curl,因此它不是传出防火墙规则或类似问题。节点请求有什么问题?

回答

10

原因是https证书验证失败。从节点的https.request()docs

rejectUnauthorized:如果为真,服务器证书是对提供的CA列表验证。如果验证失败,则会发出“错误”事件。在发送HTTP请求之前,验证发生在连接级别。默认为true。

除非另有明确规定,HTTP [S] [请求|获得。将使用而忽略tls.connect()选项,包括rejectUnauthorized标志的全球代理。致电(或请求)需要修改,因此:

var options = require('url').parse(/**String*/ url); 
options.rejectUnauthorized = false; 
options.agent = new https.Agent(options); 

https.get(/**Object*/ options, function (res) { 
    // handle response & body 
}).on('error',function (e) { 
    // handle errors 
}).end(); 
+0

谢谢。我遇到了类似的问题。 – Nate 2013-07-22 19:56:51

+0

@Venkat你知道你可以接受你自己的(优秀)回答:) – Ben 2015-06-01 20:18:11

相关问题