URL监控中的请求应该失败,但不要

时间:2016-05-25 08:16:49

标签: windows powershell

我正在尝试使用PowerShell编写一个脚本来监视Windows服务器中的URL。以下是脚本。我使用了三个网址来查看回复。  预期结果是

  • http://google.com - 应该失败,因为HTTP将被重定向到HTTPS,但我得到了200作为响应。
  • https://google.com - 应该取得成功并取得成功。
  • https://yahoo.com - 应该失败,因为代理会阻止雅虎。

但有趣的是我获得了所有3个网址的成功。 https://google.com在某种程度上是可以接受的,但是在雅虎的情况下,代理服务器在网站被阻止时抛出错误页面,但是下面的代码将代理错误页面视为成功,并将其显示为成功但有错误。

enter image description here

请告诉我哪种方法可以在PowerShell中获取HTTP响应代码。

$sites = @(
    "http://www.google.com",
    "https://www.google.com",
    "https://www.yahoo.com"
)

foreach ($url in $sites) {
    $HTTP_Request  = [System.Net.WebRequest]::Create("$url")
    $HTTP_Response = $HTTP_Request.GetResponse()
    $HTTP_Status   = [int]$HTTP_Response.StatusCode

    if ($HTTP_Status -eq 200) { 
        Write-Host "$url" " is OK!" 
    } else {
        Write-Host "$url" " may be down, please check!"
    }
    $HTTP_Response.Close()
}

1 个答案:

答案 0 :(得分:0)

您的代理需要身份验证,因此您甚至无法从https://www.yahoo.com获得HTTP响应。由于您未提供代理凭据,因此调用$req.GetResponse()会引发错误,变量$HTTP_Response将保留其上一次迭代的值(来自https://www.google.com的响应)。这就是为什么你觉得这个网址没问题。

GetResponse()引发的错误并在发生错误时将$HTTP_Status设置为200以外的值:

foreach ($url in $sites) {
    $HTTP_Request = [Net.WebRequest]::Create($url)
    try {
        $HTTP_Response = $HTTP_Request.GetResponse()
        $HTTP_Status   = $HTTP_Response.StatusCode.value__
    } catch {
        $HTTP_Status = 0
    } finally {
        if ($HTTP_Status -eq 200) { 
            Write-Host "$url is OK!" 
        } else {
            Write-Host "$url may be down, please check!"
        }
    }
}