【问题标题】:" The remote server returned an error: (401) Unauthorized "“远程服务器返回错误:(401) Unauthorized”
【发布时间】:2014-05-20 22:08:57
【问题描述】:

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

我用过:

$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) Unauthorized.

但在那之后我得到了:

网站没问题

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

【问题讨论】:

    标签: powershell httpresponse


    【解决方案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() 在非 OK 状态码上抛出异常,您可以在此处阅读更多信息:.Net HttpWebRequest.GetResponse() raises exception when http status code 400 (bad request) is returned

    【讨论】:

    • 谢谢,有帮助。您会这​​么说吗?错误 401(未经授权)表示该站点已加密?意思是,kerberos 代表团不允许我访问?还是其他地方有错误?
    • 401 并不意味着该站点已加密,而是您未通过身份验证。 Kerberos 只会在浏览器中自动传递您的凭据,对于 PS 构造,请尝试此操作以解决身份验证问题:stackoverflow.com/questions/508565/…stackoverflow.com/questions/8919414/…
    • 好的,谢谢,我设法通过了我的凭据,它说它已连接。
    【解决方案2】:

    我认为会发生以下情况:

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

    我个人倾向于在我的脚本中使用 invoke-webrequest。这使得处理错误更容易,因为它支持所有常用参数,如 Erroraction 等。

    【讨论】:

    • 我尝试使用 invoke-webrequest 但我不断收到错误消息:“不被识别为 cmdlet 的名称”- 例如:$r = Invoke-WebRequest example.com
    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2014-12-26
    相关资源
    最近更新 更多