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();
- passport-facebook-token返回InternalOAuthError:validation令牌时无法获取用户configuration文件
- PassportJS获取Facebook用户位置
- 如何在服务器端(Node.js)以编程方式validationFacebook用户的访问令牌?
- FacebookTokenError:这个授权码已被使用
- 如何在张贴尝试发布操作时在Facebook链接中提供信息的“开放graphicsAPI”调用“属性名称”
- 在Node.js中将mikeal的请求和http / https模块进行比较
- 社交authentication – 在FE或BE方面做得更好?
- MEAN堆栈 – 如何允许API访问权限只有login(电子邮件/密码和Facebooklogin)的用户
- “这是不允许的,需要预检的错误”在护照Facebooklogin错误的交叉来源?