node.js https.get()激发错误ECONNREFUSED
OAuth舞蹈的其中一个步骤是将通过callback接收到的代码交换为访问令牌。 特别是对于Facebook服务器端身份validation,以下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工作正常,所以它不是一个传出的防火墙规则或类似的问题。 节点请求有什么问题?
原来问题是https证书validation失败。 从节点的https.request() 文档 :
rejectUnauthorized :如果为true,则根据提供的CA列表validation服务器证书。 如果validation失败,则会发出“错误”事件。 在发送HTTP请求之前,validation发生在连接级别。 默认为true。
除非明确提供,否则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();
- HTML5 Websocket + Node.js实时通知系统
- 如何实现Rest API,它支持使用nodejs和mongodb进行部分响应和嵌套查询
- 什么是正确的方式做facebooklogin移动应用程序(与node.js / passport.js服务器)
- Passport.js和Facebook Graph API
- 麻烦连接webhook到Facebook messenger bot
- 对FB和G +计数端点的批量asynchronous调用失败
- 在Node.js中将mikeal的请求和http / https模块进行比较
- Node.js – 从facebookgraphicsAPI获取我的帐户详细信息
- 如何用Oauth请求提交和处理请求参数?