当前位置: 首页 > 知识库问答 >
问题:

如何在Postman工具的预请求脚本中提供soap xml正文

匡安宜
2023-03-14

我试图在邮递员预请求脚本中添加一个脚本,这将返回一个令牌。下面是请求的虚拟代码。我无法在请求正文中设置soap xml。在这件事上需要帮助!

pm.sendRequest({
    url: "https://test.salesforce.com/services/Soap/c/42.0",
    method: "POST",
    header: {
        'Content-Type': 'text/xml',
        'SOAPAction': ''
      },
    body: {}
},
function (err, res) {
    console.log("Response - " + res);
}
);
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="urn:enterprise.soap.sforce.com">
    <SOAP-ENV:Header>
        <ns2:Header>
        </ns2:Header>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns3:login xmlns:ns3="urn:enterprise.soap.sforce.com" xmlns="">
            <ns3:username>USERNAME</ns3:username>
            <ns3:password>PASSWORD</ns3:password>
        </ns3:login>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
pm.sendRequest({
    url: "https://test.salesforce.com/services/Soap/c/42.0",
    method: "POST",
    header: {
        'Content-Type': 'text/xml',
        "SOAPAction": ""
      },
    body: {
        mode:"xml",
        xml: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns2=\"urn:enterprise.soap.sforce.com\"><SOAP-ENV:Header><ns2:Header></ns2:Header></SOAP-ENV:Header><SOAP-ENV:Body><ns3:login xmlns:ns3=\"urn:enterprise.soap.sforce.com\" xmlns=\"\"><ns3:username>USERNAME</ns3:username><ns3:password>PASSWORD</ns3:password></ns3:login></SOAP-ENV:Body></SOAP-ENV:Envelope>"
    }
},
function (err, res) {
    var jsonObject = xml2Json(res);
    console.log("Response - " + jsonObject);
    pm.globals.set("session_id", jsonObject.sessionId);
}
);
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sf="urn:fault.enterprise.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><soapenv:Fault><faultcode>UNKNOWN_EXCEPTION</faultcode><faultstring>UNKNOWN_EXCEPTION: Premature end of file.</faultstring><detail><sf:UnexpectedErrorFault xsi:type="sf:UnexpectedErrorFault"><sf:exceptionCode>UNKNOWN_EXCEPTION</sf:exceptionCode><sf:exceptionMessage>Premature end of file.</sf:exceptionMessage></sf:UnexpectedErrorFault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>

共有1个答案

狄鹏
2023-03-14

最后,在@Borys Fursov的帮助下,我找到了问题的解决方案。以下是正确的请求-

pm.sendRequest({
    url: "https://test.salesforce.com/services/Soap/c/42.0",
    method: "POST",
    header: {
        'Content-Type': 'text/xml',
        'SOAPAction': '""'
      },
    body: {
        mode:"raw",
        raw: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns2=\"urn:enterprise.soap.sforce.com\"><SOAP-ENV:Header><ns2:Header></ns2:Header></SOAP-ENV:Header><SOAP-ENV:Body><ns3:login xmlns:ns3=\"urn:enterprise.soap.sforce.com\" xmlns=\"\"><ns3:username>xxxxxxxxxx@xxxxx.com</ns3:username><ns3:password>xxxxxxxxxxxxxxxxxxxx</ns3:password></ns3:login></SOAP-ENV:Body></SOAP-ENV:Envelope> "
    }
},
function (err, res) {
    if (res.code === 200) {
        // console.log("Response - " + res.text());
        var responseJson = xml2Json(res.text());
        var sessionId = responseJson['soapenv:Envelope']['soapenv:Body'].loginResponse.result.sessionId;
        console.log("Session id - " + sessionId);
        pm.globals.set("session_id", sessionId);
    } else {
        console.log("Response - " + res.code + " " + res.reason());
        console.log("Response - " + res.text());
    }
}
);

不幸的是,由于敏感信息,我无法粘贴输出。谢了!

 类似资料:
  • 我正在尝试使用form-data在请求前脚本中创建请求,并且在正文中我想从我的工作目录上传一个pdf文件。 我使用了以下脚本,并且该文件未附加到我的脚本中。你能帮我确定我的问题吗?

  • 我使用Postman6.0发送HTTP请求。为了发送请求,我使用请求前脚本获取令牌并将其放入环境中,以便在后续请求中使用它。 下面的脚本不起作用,因为没有发送正文。下面的剧本有什么问题吗?

  • 我使用纽曼在特拉维斯构建后运行API测试。 我试图限制请求前脚本的重复,所以检查了一些关于如何在集合级别拥有请求前脚本的变通方法。 我的问题是,我不想在每个请求上都运行它们,只在我需要它们的时候运行。 示例:我正在尝试运行登录脚本以在私有endpoint上使用返回的令牌。 我的代码看起来像: 集合级别预请求脚本定义: 请求级别预请求脚本定义: 有人可以帮助我解决为什么我不能在此范围内运行pm.se

  • 我正在尝试发送一个经过身份验证的请求,只需点击邮递员。 所以,我有一个名为“Oauth”的请求,我正在使用测试将令牌存储在局部变量中。 我现在要做的是,对于需要承载令牌的任何其他请求,自动运行Oauth请求(从预请求脚本)。 有没有一种方法可以通过单击邮递员按钮来获取访问令牌并发送经过身份验证的请求?

  • 如何调用POST API请求(具有用户名请求主体的登录API 登录API:POST方法;请求正文:用户名和密码;响应正文:令牌。获取客户记录API:GET方法;请求URI: /token/ 只想在邮递员的一个测试中涵盖这种端到端场景。任何人都可以帮我提供预请求脚本吗?我应该如何调用登录 API?

  • 我正在用Application/JSON数据发送原始POST请求到邮递员服务器。我需要使用这个JSON对象,并在请求前脚本中追加一些数据。但是我只能找到如何访问环境变量,而不能请求主体。有人知道吗?谢了!