Как получить 200 кодов статуса в PS после проверки перенаправленного URL - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь получить код состояния 200 для URL, но вместо этого получаю 0.URL работает, но проблема в том, что это перенаправленный URL.Даже если я попробую окончательный URL-адрес после его перенаправления, он все равно покажет мне код статуса 0.

Как я могу получить правильный код состояния для сайта, который работает или не работает, независимо от того, был ли он перенаправлен или нет?

Это то, что у меня сейчас, отлично работает для обычных URL-адресов, таких как http://google.com, но не для перенаправленных URL-адресов.К сожалению, URL-адреса, с которыми я работаю, являются частными, но они имеют формат http://example.com, который заканчивается на https://example.com/index?redirectUrl=

Если я запускаю скрипт PS ниже с:. \ CheckUrl.ps1 https://example.com/index?redirectUrl=

... по-прежнему не удается вернуть код 200. Страница отображается нормально, использую ли я 1-й URL или окончательный перенаправленный URL, но код состояния возвращает 0, что означает, что сайт говорит, чтовниз, и это не правда.

$url = $args[0]
function Get-WebStatus($url) {
    try {
        [Net.HttpWebRequest] $req = [Net.WebRequest]::Create($url)
        $req.Method = "HEAD"
        [Net.HttpWebResponse] $res = $req.GetResponse()
        if ($res.StatusCode -eq "200") {
            Write-Host "`nThe site $url is UP (Return code: $($res.StatusCode) - $([int] $res.StatusCode))`n"
        } else {
            Write-Host "`nThe site $url is DOWN (Return code: $($res.StatusCode) - $([int] $res.StatusCode))`n"
        }
    } catch {
        Write-Host "`nThe site $url is DOWN (Return code: $($res.StatusCode) - $([int] $res.StatusCode))`n" -ForegroundColor Red -BackgroundColor Black
    }
}
Get-WebStatus $url

1 Ответ

0 голосов
/ 20 февраля 2019

Слишком долго для комментария.Важное замечание: $res = $req.GetResponse() не устанавливает никакого значения для переменной $res в случае catch (переменная $res остается неизменной).

#url1 = $args[0]
function Get-WebStatus($url) {
    try {
        $req = [System.Net.HttpWebRequest]::Create($url)
        $req.Method    = "HEAD"
        $req.Timeout   = 30000
        $req.KeepAlive = $false
        $res = $req.GetResponse()
        if ($res.StatusCode.value__ -eq 200) {
            Write-Host ("`nThe site $url is UP (Return code: " + 
                "$($res.StatusCode) - " + 
                "$($res.StatusCode.value__))`n") -ForegroundColor Cyan
        } else {
            Write-Host ("`nThe site $url is DOWN (Return code: " +
                "$($res.StatusCode) - " + 
                "$($res.StatusCode.value__))`n") -ForegroundColor Yellow
        }
    } catch {
        $res = $null  ### or ### [System.Net.HttpWebRequest]::new()
        Write-Host ("`nThe site $url is DOWN " + 
            "($($error[0].Exception.InnerException.Message))`n") -Foreground Red
    }
    $res    ### return a value
}
#Get-WebStatus $url1

Вывод примеры:

Get-WebStatus 'https://google.com/index?redirectUrl='
Get-WebStatus 'https://google.com/'
Get-WebStatus 'https://example.com/index?redirectUrl='
The site https://google.com/index?redirectUrl= is DOWN (The remote server
 returned an error: (404) Not Found.)

The site https://google.com/ is UP (Return code: OK - 200)

The site https://example.com/index?redirectUrl= is DOWN (The operation has
 timed out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...