【问题标题】:SOAP Request using nodejs使用 nodejs 的 SOAP 请求
【发布时间】:2017-07-29 21:48:15
【问题描述】:

你好,谁能帮帮我。

如何请求soap web 服务并获取xml 响应。 塞纳里奥: 使用soap ui即时发送带有用户名,密码身份验证的wsdl url,我还将发送soap xml数据并得到响应。 同样的事情如何使用 nodejs 或sails 来实现。

在SoapUi中我的soap xml请求是这样的

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tier="http://HCSLN9191-GMS.gois.ito.unisys.com/Tier1ICLStd:Tier1ICLMB_StdDispatch">
   <soapenv:Header/>
   <soapenv:Body>
      <tier:UnisysMB_Dispatch>
         <PayLoad>SomeData</PayLoad>
      </tier:UnisysMB_Dispatch>
   </soapenv:Body>
</soapenv:Envelope>

而我的 Soap 身份验证就像

$用户名:xyz & 密码:xyz

我的 wsdl 网址是 http://esbuatt1wm.ito.xyz.com:7001/ws/Tier1ICLStd_New:Tier1ICLMB_StdDispatch_New?WSDL

在提供此信息后,我得到了类似的 xml 响应

<ser-root:CommAck xmlns:ser-root="http://HCSLN1181-GMS.gois.ito.unisys.com/Tier1ICLStd_New:Tier1ICLMB_StdDispatch_New" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CommAck>
<MB_UUID>cbbb683d-e9b1-4d12-b0db-8006134aad27</MB_UUID>
<ServiceID>McDonalds</ServiceID>
<Acknowledge>0</Acknowledge>
<Comment>Payload does not contain the pattermatch xpath.</Comment>
</CommAck>
</ser-root:CommAck>

我的问题是如何使用 node easy soap 获得上述 xml 响应, 我是肥皂概念的新手。任何人都可以帮我为上述情景提供适当的 sn-p .....

【问题讨论】:

    标签: node.js soap wsdl


    【解决方案1】:

    你可以使用这个包https://www.npmjs.com/package/soap。示例在同一链接中。我在下面粘贴了一些内容:

    使用 npm 安装:

      npm install soap
    

    例子:

    var soap = require('soap');
      var url = 'http://example.com/wsdl?wsdl';
      var args = {name: 'value'};
      soap.createClient(url, function(err, client) {
          client.MyFunction(args, function(err, result) {
              console.log(result);
          });
      });
    

    基本身份验证安全

      client.setSecurity(new soap.BasicAuthSecurity('username', 'password'));
    

    【讨论】:

    • 嗨,manishg,我是肥皂概念的新手,我们需要在你的前任那里 paas 的 args 是什么?
    • 嗨@maheshbhagirath args 是您的wsdl 接受的对象。如果不需要,则发送空对象。肥皂会将该对象转换为 xml。
    • MyFunction 是在 wsdl 上定义的吗?此外,这个取自 soap 自述文件的示例并没有真正回答问题,因为它没有使用问题提供的任何 XML。
    • 这没有回答问题,你只是从 npm soap 包npmjs.com/package/soap 复制粘贴文件。它用于创建soap客户端和服务器(基于套接字的侦听器和客户端)。不发出 http 请求。
    • 我在回答中确实提到我已经粘贴了该包中的内容。肥皂使用“http”
    【解决方案2】:

    您可以使用Axios 基于 Promise 的 Nodejs 包。

    一个例子:

    const baseURL = '';
    const apiKey = '';
    const xmlBody = `XML body here // you can also add api key using ${apiKey} like this if needed`;
    axios.post(BaseURL,xmlBody,{
    headers: {
    'Content-Type': 'text/xml'
    }
    }
    ).then(response => {console.log(response.data)}
    ).catch(err => {console.log(err)});
    

    【讨论】:

      【解决方案3】:

      你可以使用soap模块。我最终不得不使用它,所以在下面提供的链接中记录了它。 对于用户名和密码,如果您的 WSDL 受密码保护,那么您还需要在使用 node-soap 创建的客户端中设置正确的 wsdl_headers

      看看这个答案:https://stackoverflow.com/a/29036380/4157003

      此外,您还需要在使用任何服务之前设置正确的安全机制

       client.setSecurity(new soap.BasicAuthSecurity('username', 'password'));

      您可以查看此链接了解更多信息 https://codecalls.com/2020/05/17/using-soap-with-node-js/

      【讨论】:

        【解决方案4】:

        您可以使用 easy-soap-request npm 包。

        如果要在nodejs中创建SOAP头passwordDigest,

        const crypto = require('crypto');
        
        function passwordDigest(created, nonce, pass) {
          // Password_Digest = Base64 ( SHA-1 ( bytes(decode64(nonce)) + bytes(created) + bytes(password) ) )
          let pd = Int8Array.from([...Int8Array.from(Buffer.from(nonce, 'base64')),
                                   ...Int8Array.from(Buffer.from(created)),
                                   ...Int8Array.from(Buffer.from(pass))]);
          pd = crypto.createHash('sha1').update(pd).digest('base64');
          return pd;
        }
        

        关于这篇文章的更详细的解释 https://stackoverflow.com/a/66824784/15485314

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-13
          • 1970-01-01
          • 2019-03-07
          • 2016-03-08
          • 1970-01-01
          相关资源
          最近更新 更多