我正在使用strong-soap(https://www.npmjs.com/package/strong-soap)从Node JS中使用wsdl
我有一个带有如下标题的wsdl: -
<soapenv:Header>
<wsse:Security xmlns:wsse="http://xyz.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-24" xmlns:wsu="http://secure.xsd">
<wsse:Username>userid</wsse:Username>
<wsse:Password Type="http://pwdtext">password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
我需要在创建客户端时添加此标头信息。 我试过像
var url = "test?wsdl";
soap.createClient(url, {wsdl_headers: {"Username": "username","Password":"password"} }, function(err, client) {
//some logic
});
但每次我收到肥皂故障“身份验证失败”。
知道我做错了吗?
提前致谢。
答案 0 :(得分:2)
我在尝试提取数据方面遇到了同样的问题。
我的错误在于createClient方法的选项是使用标题而不是 wsdl_headers
在调用任何方法之前,还在客户端上设置相同的身份验证
我的代码看起来像
var url = 'https://datahere?wsdl';
var httpOptions = {
wsdl_headers: {
'Authorization': 'Basic ' + new Buffer('username' + ':' + 'password').toString('base64')
}
};
soap.createClient(url, httpOptions, function(err, client) {
if (err) {
console.log(err.message);
response.status(401).end();
} else {
var requestArgs = {
Method1: 'dummyData',
Method2: ''
};
// client.setSecurity(new soap.BasicAuthSecurity('password', 'password'));
client.addHttpHeader('customHeader1', 'words');
client.addHttpHeader('Authorization', "Basic " + new Buffer('username-app-maker' + ':' + 'password').toString('base64'));
client.GETSOAPMETHOD(requestArgs, function(err, result) {
if (err) {
console.log(err.message);
}
console.log('i found ' + result);
response.send(result);
});
}
});
答案 1 :(得分:0)
正如this answer中所述,wsdl_header对象需要一个密钥&#39;身份验证&#39;
因此,请尝试运行以下代码:
var url = 'test?wsdl';
var auth = "Basic " + new Buffer("your username" + ":" + "your password").toString("base64");
soap.createClient(url, { wsdl_headers: {Authorization: auth} }, function(err, client) {
});