我正在尝试验证我的网址是否得到回复。 换句话说,我试图检查身份验证是否已成功接近网站。
我用过:
$HTTP_Request = [System.Net.WebRequest]::Create('http://example.com')
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = [int]$HTTP_Response.StatusCode
If ($HTTP_Status -eq 200) {
Write-Host "Site is OK!"
} Else {
Write-Host "The Site may be down, please check!"
}
$HTTP_Response.Close()
我收到了回复:
远程服务器返回错误:(401)未经授权。
但在那之后我得到了:
网站还可以
这是否意味着它没问题?如果没有,那有什么不对?
答案 0 :(得分:1)
您正常运行,因为您重新运行命令并且$HTTP_Response
包含先前成功运行的对象。使用try / catch结合正则表达式来提取正确的状态代码(并清理变量):
$HTTP_Response = $null
$HTTP_Request = [System.Net.WebRequest]::Create('http://example.com/')
try{
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = [int]$HTTP_Response.StatusCode
If ($HTTP_Status -eq 200) {
Write-Host "Site is OK!"
}
else{
Write-Host ("Site might be OK, status code:" + $HTTP_Status)
}
$HTTP_Response.Close()
}
catch{
$HTTP_Status = [regex]::matches($_.exception.message, "(?<=\()[\d]{3}").Value
Write-Host ("There was an error, status code:" + $HTTP_Status)
}
.Net HttpWebRequest.GetResponse()会针对非正常状态代码抛出异常,您可以在此处详细了解:.Net HttpWebRequest.GetResponse() raises exception when http status code 400 (bad request) is returned
答案 1 :(得分:0)
我认为会发生以下情况:
您正在尝试使用GetResponse()查询网页。这会失败,因此以下语句将使用您在上一次运行中设置的值运行。这导致您描述的输出。
我个人倾向于在我的脚本中使用invoke-webrequest。这使得处理错误变得更容易,因为它支持所有常见参数,如Erroraction等。