我刚开始使用SOAP,尤其是在节点内部,但我真的很想学习如何使用不同的数据传输协议。
我已经使用和快速中间件以及Node.js服务器构建了一个Range5应用程序来通信REST。但是,现在我必须从另一个源中提取一些数据,通过SOAP进行通信。我有一个请求和身体看起来是这样的:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetDashboardInfo xmlns ="http://IAmAURL.com/client">
<username>ThisIsNotTheRealUser</username>
<password>ThisIsNotTheRealPassword</password>
<applicationIdentifier>Identifier.827</applicationIdentifier>
<deviceIdentifier>DataTest</deviceIdentifier>
</GetDashboardInfo>
</soap:Body>
</soap:Envelope>
发布到客户端的文章:https://server.someplace.com/MobileClient.asmx
我知道请求在使用PostMan时返回我想要的数据:
像这样的SOAP请求通常与Node通信的方式有哪些?
发布于 2018-06-10 14:17:48
好了!我想通了。经过一段时间的测试,结果发现SOAP调用并不太复杂。对于我的特定场景,Node代码如下所示:
var request = require("request");
var options = { method: 'POST',
url: 'https://server.someplace.com/MobileClient.asmx',
headers:
{ 'Cache-Control': 'no-cache',
'Content-Type': 'text/xml' },
body: '<?xml version="1.0" encoding="utf-8"?>\r\n<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\r\n<soap:Body>\r\n<GetDashboardInfo xmlns ="http://IAmAURL.com/client">\r\n<username>ThisIsNotTheRealUser</username>\r\n<password>ThisIsNotTheRealPassword</password>\r\n<applicationIdentifier>Identifier.827</applicationIdentifier>\r\n<deviceIdentifier>DataTest</deviceIdentifier>\r\n</GetDashboardInfo>\r\n</soap:Body>\r\n</soap:Envelope>' };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
我会尽量详细地解释这一点,如果我错了,请纠正我:
这里发生了一些事情。请求是节点的依赖项,它简化了http调用。在options对象中,我们定义了方法,据我所知,它总是用于SOAP调用。URL是指向请求的URL。主体是SOAP请求的一部分,包含用于格式化数据的函数/方法和XML模式。这些函数依赖于您使用的api,因此请与您从谁那里提取数据,检查它们提供了哪些方法来授予您特定需要的数据。主体还包含访问我的soap服务所需的身份验证。最后,我将结果(主体)记录在控制台中,它返回以XML格式的所有数据。
太棒了!现在怎么办?现在,我需要将XML格式化为我可以实际使用的JSON对象。为此,我可能会使用节点包xml2json,但这是另一个问题。
希望这能帮到某个人。
https://stackoverflow.com/questions/50788109
复制相似问题