在Powershell v3.0中,我想从HTTP GET返回响应代码,例如 200 OK
要么 500 Internal Server Error
。 (这是为了进行黑客部署,对部署的站点进行快速预热并查看它是否有效,这是一种小型验收测试。状态代码确实是我想要的。)
违背我的意愿, HttpWebRequest.GetResponse
收到a时会抛出错误 500 Internal Server Error
。这很烦人,因为在我的用例中对我来说并不是一个错误。无论如何,我认为我可以捕获异常并仍然剥离底层响应代码,但我遇到了麻烦。
这是一些几乎可以工作的代码:
function WebResponseStatusCode (
[Parameter(Mandatory=$true)][string] $url
) {
$req = [system.Net.HttpWebRequest]::Create($url)
try {
$res = $req.GetResponse();
$statuscode = $res.statuscode;
}
catch [System.Net.WebException] {
#the outer error is a System.Management.Automation.ErrorRecord
Write-Host "error!"
return = $_.Response.statuscode; #nope
}
finally {
if (!($res -eq $null)) {
$res.Close();
}
}
return $statuscode;
}
问题当然是这样的 $_
没有 Response
属性。也没有 $_.InnerException
,即使是演员:
return [System.Net.WebException]($_.InnerException)
我玩过 $_ | Get-Member
并探索其所有属性。我想 $_.TargetObject
有一些承诺,但它似乎没有。
(更新我也认为我试过变种 $_.Exception.Response
虽然可能弄错了。
获得响应代码似乎是一件非常简单的事情。