首页 > 解决方案 > 检查重定向 URL 后如何在 PS 中获取 200 状态码

问题描述

我正在尝试为 URL 获取 200 状态代码,但我一直得到 0。该网址有效,但问题是它是一个重定向的网址。即使我在重定向后尝试最终 URL,它仍然会显示 0 状态代码。

无论是否被重定向,我如何才能为关闭或启动的网站获取正确的状态代码?

这就是我现在所拥有的,它适用于像http://google.com这样的常规 URL ,但不适用于重定向的 URL。不幸的是,我正在使用的 url 是私有的,但它的格式是http://example.com,最后是https://example.com/index?redirectUrl=

如果我使用以下命令运行 PS 脚本: .\CheckUrl.ps1 https://example.com/index?redirectUrl=

...它仍然无法返回 200 的代码。无论我使用第一个 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

标签: powershellurl

解决方案


评论太长了。重要提示:在这种情况下$res = $req.GetResponse()不给变量设置任何值( 变量保持不变)。$rescatch$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)

推荐阅读