如何使用Axios NPM库执行带有XML SOAP参数的GET请求?

i2loujxw  于 2022-12-12  发布在  iOS
关注(0)|答案(1)|浏览(276)

Axios允许您使用查询和参数运行GET查询。是否有方法将XML SOAP参数传递到Axios请求中?

await Axios.get(url, {
  params: xmls, // Is it this?
  data: xmls, // Is it this?
  headers: { "Content-Type": "text/xml;charset=UTF-8" },
});
p4rjhz4m

p4rjhz4m1#

axios.post()而不是axios.get()使用SOAP API调用
POST的enctype属性可以是multipart/form-data或application/x-www-form-urlencoded,而对于METHOD=“GET”,只允许使用application/x-www-form-urlencoded。
GET在通过URL传递时只发送一个ASCII码,ASCII码中的数据与作为URL的一部分被发送的多行TEXT不能作为XML格式发送.另一方面,二进制数据、图片等文件都可以通过METHOD=“POST”在body中提交。
这就是为什么POST在SOAP API调用中比GET更常见的原因。

const response = await axios.post(
    url,
    payload,
    {
        headers: {
            'Content-Type': 'text/xml; charset=utf-8'
        }
    }
);

我将演示calculator SOAP service中的一个附加功能:Calculator
WSDL(Web服务描述语言)描述基于SOAP的Web服务的功能。

完整代码

const axios = require("axios");
const jsdom = require("jsdom");

const getAdd = async (a, b) => {
    const url = 'http://www.dneonline.com/calculator.asmx'
    const payload =`<?xml version="1.0" encoding="utf-8"?> \
        <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> \
            <soap:Body> \
                <Add xmlns="http://tempuri.org/"> \
                    <intA>${a}</intA> \
                    <intB>${b}</intB> \
                </Add> \
            </soap:Body> \
        </soap:Envelope>`
    try {
        const response = await axios.post(
            url,
            payload,
            {
                headers: {
                    'Content-Type': 'text/xml; charset=utf-8'
                }
            }
        );
        return Promise.resolve(response.data);
    } catch (error) {
        return Promise.reject(error);
    }
};

getAdd(100,200)
    .then(result => {
        // display response of whole XML
        console.log(result);

        // extract addition result from XML
        const dom = new jsdom.JSDOM(result);
        console.log('100 + 200 = ' + dom.window.document.querySelector("AddResult").textContent); // 300

    })
    .catch(error => {
        console.error(error);
    });

安装库

npm install axios jsdom

运行程序

node add.js

结果

$ node add.js
<?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><AddResponse xmlns="ht
tp://tempuri.org/"><AddResult>300</AddResult></AddResponse></soap:Body></soap:En
velope>
100 + 200 = 300

参考GET vs. POST

相关问题