繁体   English   中英

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

[英]“ The remote server returned an error: (401) Unauthorized ”

我正在尝试验证我的URL是否得到响应。 换句话说,我正在尝试检查身份验证是否已成功访问该站点。

我用了:

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

但是之后我得到了:

网站还可以

这是否还可以? 如果没有,那是什么问题?

之所以可以,是因为重新运行命令,并且$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()在非OK状态代码上引发异常,您可以在此处详细了解: .Net HttpWebRequest.GetResponse()在返回HTTP状态代码400(错误请求)时引发异常。

我认为会发生以下情况:

您正在尝试使用GetResponse()查询网页。 这将失败,因此以下语句将使用您在上一次运行中设置的值运行。 这将导致您描述的输出。

我个人倾向于在脚本中使用invoke-webrequest。 由于它支持所有通用参数(如Erroraction等),因此更易于处理错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM