gpt4 book ai didi

rest - Powershell正在吞噬REST错误响应

转载 作者:行者123 更新时间:2023-12-03 07:52:48 25 4
gpt4 key购买 nike

我在Powershell中使用Invoke-WebRequest,每当目标API端点确定我的请求无效时,它显然会拒绝该请求并发送回HTTP错误代码(例如(400) Bad Request),但它还包括错误原因(由API供应商提供) ),但未包含在PowerShell的日志中。

我确认已将详细错误发回,因为我在PostMan中看到了该错误,而供应商也确认了相同的错误。 Powershell只是不想显示它。这是我的代码及其生成的响应的示例。

Invoke-WebRequest -Credential $cred -Uri $url -Method POST -Body $json -ContentType 'application/json'
Invoke-WebRequest : The remote server returned an error: (400) Bad Request.
At \\*****\******$\Appsense\Desktop\Untitled2.ps1:42 char:1
+ Invoke-WebRequest -Credential $cred -Uri $url -Method POST -Body $jso ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest)
[Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.
InvokeWebRequestCommand

如何捕获更详细的错误消息?

最佳答案

分为两个部分。首先,您需要使用-ErrorAction Stop引发终止错误。然后,我们可以使用try/catch块来捕获异常。有了Exception,我们就可以获取存储在Exception Status Description中的详细响应。这对于大多数请求都很好。

要获取邮件的正文,还需要执行几个步骤。由于我们得到了WebResponse对象,因此没有“Nice”消息参数可供我们使用。因此,我们必须使用StreamReader自己流式传输内容:

try
{
$Response = Invoke-WebRequest -Credential $cred -Uri $url -Method POST -Body $json -ContentType 'application/json' -ErrorAction Stop
# This will only execute if the Invoke-WebRequest is successful.
$StatusCode = $Response.StatusCode
}
catch
{
#Excepion - Display error codes
Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription

#Get body of me
$streamReader = [System.IO.StreamReader]::new($_.Exception.Response.GetResponseStream())
$ErrResp = $streamReader.ReadToEnd() | ConvertFrom-Json
$streamReader.Close()
Write-Host $ErrResp
}

关于rest - Powershell正在吞噬REST错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56600792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com