web-services - 当服务器返回状态代码 400 时使用 powershell 检索响应内容

标签 web-services powershell

所以我通过 powershell 调用 rest web 服务,如果您尝试发布已经处理过的数据,它会返回一个 400 状态代码,除了状态代码之外,它还会返回一个 JSON 响应,格式如下:

{
    "statusCode": 400,
    "errorCode": "REQUEST_VALIDATION_ERROR",
    "message": "validation failed",
    "developerMessage": " MessageId-xxx already processed. No Need to process again."
}

所以我尝试用一​​些 powershell 调用它并接收 400 状态代码并使用 try/catch 处理它以获取异常,但响应中没有内容,我可以获得响应 header 、状态代码、状态消息等等,但我根本找不到访问 JSON 响应的方法,这里是我正在使用的 powershell 代码的格式:

$url = "https://example.com/webservice/status"
$cert = Get-ChildItem Cert:\CurrentUser\My\certthumbprintxxxxx
$headers = @{"tokenId" = "tokenxxxxx"}

$body = 
@"
{
...
 JSON data...
...
}
"@

try 
{
    $response = Invoke-WebRequest $url -Certificate $cert -Headers $headers -Method Post -Body $body
    }
catch
{
    $_.Exception.response
    }

当我向 Get-Member 发送 $_.Exception.response 时,我可以看到没有内容属性。如何使用 powershell 访问响应中的消息?

最佳答案

您可以通过 $_.ErrorDetails.Message 从 ErrorDetails 属性访问内容消息。它返回一个字符串。

作为替代方案,您也可以使用 $_.Exception.Response.GetResponseStream() 直接从 WebResponse 类中读取流(如 here 所述,我必须将流放在位置 0再次因为它似乎已经被 powershell 读取了)

   $s = $_.Exception.Response.GetResponseStream()
   $s.Position = 0;
   $sr = New-Object System.IO.StreamReader($s)
   $err = $sr.ReadToEnd()
   $sr.Close()
   $s.Close()

关于web-services - 当服务器返回状态代码 400 时使用 powershell 检索响应内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32585370/

相关文章:

Powershell:命令行参数中的冒号

powershell - 如何搜索 PowerShell Get-Help 条目?

c# - 使用 Microsoft.PowerShell.Commands 找不到命名空间 'CopyItemCommand'

web-services - IIS中“默认网站”的IP地址“自动”更改

java - 为什么在同步线程时 WebMethods 会被阻塞?

java - 如何在 JAX-RS 中为子资源中的子资源设计路径?

swift - 在 Swift 中使用来自 Web 服务的 NSXMLParser 解析 SOAP 响应

java - 无法从 WSDL 生成 stub /java 骨架

MySQL 插入脚本

windows - 批处理变量被设置为 ■1 而不是预期的输出