2013-04-10 56 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

相關問題