Node.js 具有证书的节点soap createClient

Node.js 具有证书的节点soap createClient,node.js,web-services,ssl,soap,node-soap,Node.js,Web Services,Ssl,Soap,Node Soap,我正在尝试使用https获取WSDL文件 以下是我的尝试: ldap.getEmpowerments = function(uid) { return new Promise(function(resolve, reject) { var url = 'https://yradeowshabil.corp.leroymerlin.com/adeo-ws-habil/AccessManagementService?WSDL' createClient(u

我正在尝试使用https获取WSDL文件

以下是我的尝试:

ldap.getEmpowerments = function(uid) {
    return new Promise(function(resolve, reject) {

        var url = 'https://yradeowshabil.corp.leroymerlin.com/adeo-ws-habil/AccessManagementService?WSDL'

        createClient(url).then( function(client) {

            console.log(client.describe);

        }, function(error) {
            console.error('habilitation client failed', error);
        });
    });
};
这给了我输出:

> hablitation client failed 
> [Error: 140274398734112:error:140773F2:SSL
> routines:SSL23_GET_SERVER_HELLO:sslv3 alert unexpected
> message:../deps/openssl/openssl/ssl/s23_clnt.c:770: ]
为了与wsdl文件建立通信,我有两个必需的证书。
我尝试了setSecurity方法,但我的客户机从未创建过,因此它毫无用处

根据文档,我可以在createClient方法中添加一些选项,并重写请求对象或httpClient。问题是没有关于如何做到这一点的解释。我该怎么做呢


谢谢您的帮助。

请尝试将此添加到您的app.js:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';

请尝试将此添加到您的app.js:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';

你好我现在也在努力通过节点soap,但我想我可能能帮上忙。我对承诺不太熟悉,但使用带有
(err,client)
的基本回调对我来说很有效(至少在创建客户机时是这样)。看起来您正在上下文外调用
createClient()
?在我的例子中,我定义了
var-soap=require('soap')
然后调用了
soap.createClient()
。您好,谢谢您的回答。我正在使用[Promise.denodeify()]将soap.createClient转换为Promise样式的函数。(var createClient=Promise.denodeify(soap.createClient))。问题不在这里,我成功地将客户机用于其他wsdl文件。我的问题是在需要ssl证书的服务器中访问wsdl文件。我现在使用纯xml请求,因为我未能实例化客户端wit node-soap.Hmm-k。上面您是说使用
setSecurity()
不起作用,因为您无法创建客户端。您是否重新定义了
createClient()
,使其无需引用
soap
对象即可访问?至于SSL,我也被困在这个问题上。¯_(ツ)_/''Yes createClient是一个基于soap.createClient的新函数。唯一的区别是它返回一个承诺,而不需要回调参数。您可以这样看:
function createClient(url){return new promise(function(resolve,reject){soap.createClient(url,function(error,client){reject(error);resolve(client);}})
Ahh.TIL.Thank!我能够让SSL请求工作,但我没有使用承诺。在我的情况下,我必须再次显式地传递端点(
soap.createClient(url,{endpoint:url},function(err,client){…}
)在客户端构造函数中允许使用https。但是,我不能说我理解您错误的格式,所以我想我没有帮助。对不起!嗨!我现在也在努力通过节点soap,但我想我可能能够提供帮助。我不太熟悉承诺,但使用
(错误,客户端)的基本回调
对我很有效(至少是创建了客户端)。看起来你在上下文之外调用了
createClient()
?在我的例子中,我定义了
var soap=require('soap');
然后调用了
soap.createClient()
。嗨,谢谢你的回答。我正在使用[Promise.denodeify()]()将soap.createClient转换为承诺式函数。(var createClient=promise.denodeify(soap.createClient))。问题不在这里,我成功地将客户端用于其他wsdl文件。我的问题是在需要ssl证书的服务器中访问wsdl文件。我现在使用纯xml请求,因为我无法实例化客户端wit-node-soap.Hmm-k。上面您说的是使用
setSecurity()
无法工作,因为您无法创建客户端。您是否重新定义了
createClient()
以便无需引用
soap
对象即可访问它?至于SSL,我也遇到了这个问题。'_(ツ)_/''Yes createClient是一个基于soap.createClient的新函数。唯一的区别是它返回一个承诺,而不需要回调参数。您可以这样看:
function createClient(url){return new promise(function(resolve,reject){soap.createClient(url,function(error,client){reject(error);resolve(client);}})
Ahh.TIL.Thank!我能够让SSL请求工作,但我没有使用承诺。在我的情况下,我必须再次显式地传递端点(
soap.createClient(url,{endpoint:url},function(err,client){…}
)在客户端构造函数中允许使用https。但是,我不能说我理解您错误的格式,所以我想我没有帮助。对不起!很遗憾,结果相同。很遗憾,结果相同。