【问题标题】:node.js https.get() fires error ECONNREFUSEDnode.js https.get() 触发错误 ECONNREFUSED
【发布时间】:2013-04-10 22:48:45
【问题描述】:

OAuth 舞蹈的其中一个步骤涉及将通过回调接收到的代码交换为访问令牌。专门针对 Facebook 服务器端身份验证,以下 https GET 请求在响应正文中返回访问代码:

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 在尝试连接时会触发错误:

 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();

错误是:

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

该调用与 wget/curl 一起工作正常,因此它不是传出防火墙规则等问题。节点请求有什么问题?

【问题讨论】:

    标签: node.js facebook-graph-api https


    【解决方案1】:

    原来问题是 https 证书验证失败。来自节点的 https.request() docs:

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

    除非明确提供,否则 http[s].[request|get] 将使用忽略 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();
    

    【讨论】:

    • 谢谢。我遇到了类似的问题。
    • @Venkat 你知道你可以接受你自己的(优秀的)答案:)
    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2020-04-30
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多