"远程服务器返回错误:(401)未授权"

时间:2014-05-20 12:38:07

标签: powershell httpresponse

我正在尝试验证我的网址是否得到回复。 换句话说,我试图检查身份验证是否已成功接近网站。

我用过:

$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)未经授权。

但在那之后我得到了:

  

网站还可以

这是否意味着它没问题?如果没有,那有什么不对?

2 个答案:

答案 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等。