我在从Postman预请求脚本中提取xml respose时遇到麻烦。我的预定要求如下:
pm.sendRequest({
url: "https://login.salesforce.com/services/Soap/u/40.0",
method: 'POST',
header: {
'soapaction': "Required",
'Content-Type': 'text/xml',
},
body: {
mode: 'raw',
raw: "<se:Envelope xmlns:se=\"http://schemas.xmlsoap.org/soap/envelope/\"> \
<se:Header/> \
<se:Body> \
<login xmlns=\"urn:partner.soap.sforce.com\"> \
<username>user</username> \
<password>password</password> \
</login> \
</se:Body> \
</se:Envelope>"
}
}, function (err, responseBody) {
console.log(pm.request.body);
var xmlTree = xml2Json(responseBody);
console.log(xmlTree);
console.log("sessionid: " + xmlTree['soapenv:Envelope']['soapenv:Body'].loginResponse.result.sessionId);
//pm.environment.set("sys_id", response.json().result.sys_id);
postman.setEnvironmentVariable("sessionid", xmlTree['soapenv:Envelope']['soapenv:Body'].loginResponse.result.sessionId);
});
当我在Postman控制台中查看响应时,我看到了正确的响应,但是当我尝试通过“ pm.request.body”或仅通过“ responseBody”访问它时,我得到一个空/空值。
以下是我看到的响应,并在我输出到日志时注意它为空:
有什么想法吗?
此外,我可以使用响应JSON负载的url做完全相同的事情,并使用相同的方法提取响应并使用值。有谁知道XML响应是否有所不同?还是应该以不同的方式处理它们?
答案 0 :(得分:0)
在深入研究之后,我发现响应是返回一个“ Stream”对象,该对象需要使用text()函数反序列化。
pm.sendRequest(loginRequest, function (err, response) {
var xmlTree = xml2Json(response.text());
var sessionid = xmlTree['soapenv:Envelope']['soapenv:Body'].loginResponse.result.sessionId;
console.log("sessionid: " + sessionid);
pm.environment.set("sessionid", sessionid);
});