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

PowerShell错误具有完整的SOAP响应而不是内容

林烨烨
2023-03-14

我在调用一个SOAP API。PowerShell给出了一个错误,这个错误包含了我所期望的响应!而我发送响应的变量的内容缺少一些数据。

[xml]$response = Invoke-WebRequest -Uri $UserURI -Method POST -ContentType "test/xml;charset=utf-8" -Body $input

$SOAPResponse = [xml]$response.Content
Invoke-WebRequest : <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="https://test.safetylearning.co.uk/api/1.3/UserManagement">
<SOAP-ENV:Body><ns1:AddUserResponse><AddUserResult><errorcode>500</errorcode>
<description>Error</description><errors><item><id>52001</id><description>Unable
to add one or more users.</description></item><item><id>52010</id>
<description>User with ID ['9991'] fails</description></item><item><id>0</id>
<description>A user identified by ID ['9991'] exists</description></item>
</errors></AddUserResult></ns1:AddUserResponse>
</SOAP-ENV:Body></SOAP-ENV:Envelope>
At C:\Temp\Delme3.ps1:37 char:18
+ ... $response = Invoke-WebRequest -Uri $UserURI -Method POST -ContentType ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
$SOAPResponse.Envelope.Body.AddUserResponse.AddUserResult.errors
$SOAPResponse.Envelope.Body.FirstChild.InnerXml
<AddUserResult><errorcode>200</errorcode><description>OK</description><errors /></AddUserResult>

为空!

SOAPUI给出了正确的错误:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://test.safetylearning.co.uk/api/1.3/UserManagement">
   <SOAP-ENV:Body>
      <ns1:AddUserResponse>
         <AddUserResult>
            <errorcode>500</errorcode>
            <description>Error</description>
            <errors>
               <item>
                  <id>52001</id>
                  <description>Unable to add one or more users.</description>
               </item>
               <item>
                  <id>52010</id>
                  <description>User with ID ['9999'] fails</description>
               </item>
               <item>
                  <id>0</id>
                  <description>A user identified by ID ['9999'] exists</description>
               </item>
            </errors>
         </AddUserResult>
      </ns1:AddUserResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

共有1个答案

欧阳安阳
2023-03-14

您需要将请求包装在try/Catch中,并在Catch块中引用$error[0].errorDetails。该特定用户错误将随以下Catch块返回:

try {
[xml]$response = Invoke-WebRequest -Uri $UserURI -Method POST -ContentType "test/xml;charset=utf-8" -Body $input
$SOAPResponse = [xml]$response.Content
$SOAPResponse
]

catch {
[xml]$errResponse = $error[0].ErrorDetails
$errCode = $errResponse.Envelope.body.AddUserResponse.AddUserResult.errors.ChildNodes[2].description
$errCode
}

该块将输出有效的SOAP响应,或者只是从错误中隐藏在SOAP信封中的错误代码

$errResponse.Envelope.body.AddUserResponse.AddUserResult.errors.ChildNodes[2].description
A user identified by ID ['9991'] exists
 类似资料:
  • 有人能解释一下为什么我通过Postman和http从外部http API得到不同的响应吗。NetCore web Api HttpClient。 这是一个密码 结果是 但Postman返回完整有效的json结果。 为什么结果从。NetCore HttpClient是部分的? 我已经尝试了指定请求头这样的选项: 还补充道: 没有帮助。

  • 问题内容: 我有一个应用程序,该应用程序在首次运行时需要通过对Web服务的SOAP调用下载大量数据。然后将响应发送到一个函数,该函数转换XML并将数据存储在db文件中。 数据大小超过16MB,并且每次都有java.lang.OutOfMemoryError。 修改Web服务以提供较小量的数据不是一种选择。 有没有办法可以下载大数据?也许像InputStream一样? 这是我的代码 有人可以建议在这

  • 我的SOAP请求有问题。当我尝试向服务器发出下面的肥皂请求时,它会返回预期的结果。 位置: 输入: 输出: 它返回此连接的令牌。 但是当我尝试处理下面的请求时,它返回整个wsdl文件,而不是成功/失败响应。 地点:http://api.notificationmessaging.com/NMSOAP/NotificationService?wsdl 输入: 输出: 预期输出: 有人能提出实际问题是

  • 我没有从改造422代码中获得完整的响应字符串作为JSON 这是我在错误体中得到的 谢谢 更新 我已经成功地将我对错误体的响应转换为Json UpdatePasswordError.kt )

  • 我有一个Mule流,其中我使用Mule的CXF入站endpoint公开了一个SOAP服务。我配置了和。通过这种CXF入站endpoint配置,它能够验证传入的SOAP请求,并在出现模式验证错误时抛出SOAP错误。到现在为止,一直都还不错。 现在,我想定制SOAP故障响应,以防模式验证错误。 我根本不想发送SOAP Fault,相反,我想在响应正文中发送如下内容 有谁能告诉我如何做到这一点吗?

  • 我正在使用Volley向API发出GET请求: 预期的JSON对象响应很大(可能高达500 KB)。我无法在日志中看到完整的响应。仅显示前50行左右。我还得到了info: BasicNetwork.log慢速请求:请求的HTTP响应= 这意味着请求需要超过3000毫秒。 尝试过的事情: 我已经在手机的开发者选项中将记录器缓冲区大小增加到1M。 原因可能是什么?当它很大的时候,响应是大块发送的吗?如