我正在尝试使用Node构建SOAP客户端,我正在使用“soap”包(https://www.npmjs.org/package/soap)尝试使用受用户/密码保护的WSDL。
我无法在“soap.createClient”创建客户端之前找到如何传递这些凭据,当然,如果我没有提供正确的凭据,我就无法检索WSDL。
我尝试过:
soap.security.WSSecurity('user','pass');
然后调用“createClient”但无济于事。
另外,我已经尝试使用node-soap-client,这个客户端我(显然)可以连接到WSDL,但在那之后,我不知道该去哪里(如何调用方法) )。
我做错了什么?
感谢您的帮助!
答案 0 :(得分:3)
用户名和密码凭证可以像这样传递:
var soap = require('soap');
var url = 'your WSDL url';
var auth = "Basic " + new Buffer("your username" + ":" + "your password").toString("base64");
soap.createClient(url, { wsdl_headers: {Authorization: auth} }, function(err, client) {
});
(源自https://github.com/vpulim/node-soap/issues/56,谢谢你 Gabriel Lucena https://github.com/glucena)
答案 1 :(得分:0)
当我将auth添加到标题时,我仍然遇到了问题。在阅读了代码和一些文章后,我发现这个工作。
// or use local wsdl if security required
let url = 'http://service.asmx?wsdl'
let wsdl = 'wsdl.wsdl';
let soap = require('soap');
let util = require('util')
soap.createClient(wsdl, function(err, client) {
//don't forget to double slash the string or else the base64 will be incorrect
client.setSecurity(new soap.BasicAuthSecurity('admin\\userName', 'password'));
client.MethodFromWSDL(args, function (err, result) {
console.log(util.inspect(result,{depth: null}))
});
});
答案 2 :(得分:0)
如果其密码受保护,则还需要检查正确的安全性机制。我花了一天的时间来弄清楚该服务使用的是NTLM安全性(这是一个客户端项目,我只有用户名和密码才能访问wsdl)。在这种情况下,您需要传递正确的wsdl_options对象
var wsdl_options = {
ntlm: true,
username: "your username",
password: "your password",
domain: "domain",
workstation: "workstation"
}
soap.createClient(data.credentials[data.type], {
wsdl_options
},
function(err, client) {
console.log(client.describe());
});
此外,在使用任何服务之前,您需要在客户端上设置setSecurity。 完整说明的链接:https://codecalls.com/2020/05/17/using-soap-with-node-js/