简体   繁体   中英

HTTP Status codes via Powershell

Somehow the below codes works fine for the first few test URLs within C:\\testurl.txt then it hung up forever when it is processing the 4th URL from the C:\\testurl.txt , no idea why it hangs up?

It is already working fine for up to 3 URLs but stuck up on 4th onward

CLS
$urllist = Get-Content "C:\testurl.txt" # URLs to test one in each line
foreach ($url in $urllist) {
    Write-Host $url

    $req = [System.Net.WebRequest]::Create($url)

    try {
        $res = $req.GetResponse()
    } catch [System.Net.WebException] {
        $res = $_.Exception.Response
    }

    $res.StatusCode
    #Print OK or whatever

    [int]$res.StatusCode
    #Print 200 or whatever
}

It is working fine for up to 3 URLs but hangs the script on 4th URL without any output or error message. Here is the example of c:\\testurl.txt

http://www.google.com
http://www.google.com     
http://www.google.com
http://www.google.com
http://www.hotmail.com
http://www.gmail.com
http://www.yahoo.com
http://www.msn.com

Please note each URL will be in a new line, you will see that script will stop at (the 4th one) you may try with your own URLs, etc too

then it hung up forever

No - it's hung until the underlying TCP connections of the previous requests time out.

The .NET CLR will internally pool all WebRequest dispatches so that only a finite number of external requests will be initiated concurrently, and as long as you have a number of un-closed WebResponse objects in memory, your requests will start queuing up.

You can avoid this by closing them (as you should):

foreach ($url in $urllist) {
    Write-Host $url

    $req = [System.Net.WebRequest]::Create($url)

    try {
        $res = $req.GetResponse()
    } 
    catch [System.Net.WebException] {
        $res = $_.Exception.Response
    }
    finally {
        $res.StatusCode
        #Print OK or whatever

        [int]$res.StatusCode
        #Print 200 or whatever

        $res.Dispose()
        # close connection, dispose of response stream
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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