You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Powershell处理SOAP请求返回的错误码

PowerShell SOAP请求错误码捕获方案

默认Invoke-WebRequest遇到4xx/5xx类HTTP错误时会直接抛出终止异常,请求成功时返回的响应对象不会包含Exception属性,请求失败时$Response变量根本不会完成赋值,因此你原来的写法不管成功还是失败都无法拿到正确的状态码。

方案1:PowerShell 7+ 简化写法(推荐)

PowerShell 7及以上版本新增了-SkipHttpErrorCheck参数,开启后无论HTTP状态码是否为2xx,都会正常返回响应对象,不会抛出异常:

# 请求时添加-SkipHttpErrorCheck参数
$Response = Invoke-WebRequest -Headers $Headers -Uri $endpoint -Method Post -Body $body -ContentType "text/xml" -OutFile "myData.xml" -SkipHttpErrorCheck

# 直接读取状态码
$Status = $Response.StatusCode
LogWrite "请求状态码:$Status"

# 状态码判断逻辑
if ($Status -ge 400) {
    # 自定义错误处理逻辑,可读取响应内容排查SOAP错误详情
    LogWrite "请求失败,响应内容:$($Response.Content)"
}

方案2:兼容PowerShell 5.1 写法

如果使用的是旧版PowerShell 5.1,没有-SkipHttpErrorCheck参数,需要通过try/catch块捕获异常后读取状态码:

try {
    $Response = Invoke-WebRequest -Headers $Headers -Uri $endpoint -Method Post -Body $body -ContentType "text/xml" -OutFile "myData.xml" -ErrorAction Stop
    # 请求成功时直接获取状态码
    $Status = $Response.StatusCode
    LogWrite "请求成功,状态码:$Status"
}
catch {
    # 捕获异常后从错误对象中读取状态码
    $Status = $_.Exception.Response.StatusCode.value__
    LogWrite "请求失败,状态码:$Status"
    
    # 可选:读取失败响应的SOAP错误内容
    $responseStream = $_.Exception.Response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($responseStream)
    $responseBody = $reader.ReadToEnd()
    LogWrite "错误响应内容:$responseBody"
    
    # 其他自定义错误处理逻辑
}

内容的提问来源于stack exchange,提问作者user11825483

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:12:04