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" }, });
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更常见的原因。
axios.post()
axios.get()
const response = await axios.post( url, payload, { headers: { 'Content-Type': 'text/xml; charset=utf-8' } } );
我将演示calculator SOAP service中的一个附加功能:CalculatorWSDL(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
1条答案
按热度按时间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更常见的原因。
我将演示calculator SOAP service中的一个附加功能:Calculator
WSDL(Web服务描述语言)描述基于SOAP的Web服务的功能。
完整代码
安装库
运行程序
结果
参考GET vs. POST