Hi,
Invoke-RestMethod or Invoke-WebRequest uses by default TLS 1.0. This protocal is outdated and would be not accepted by the most Webservers anymore.
Usually this results in the following error message:
The underlying connection was closed: An unexpected error occurred on a receive.
Continue reading Windows: Invoke-RestMethod =>The underlying connection was closed: An unexpected error occurred on a receive. →
Hi,
the powershell command-let Invoke-WebRequest does not follow an http redirect.
The solution is to call Invoke-WebRequest recursivly with the redirect URL from the location header field when http code 301 or 308 is returned.
$sURL = "https://visualstudio.com/"
$sRedirectTo=$null
do {
$oWebResponse = $null
try
{
$oWebResponse = Invoke-WebRequest $sURL
}
catch
{
$oWebResponse=$_.Exception.Response
write-host ("Exception: {0}" -f $_.Exception.Message)
}
if($oWebResponse.StatusCode -ne 200)
{
$aRedirectTo=$oWebResponse.Headers.GetValues("location")
if($aRedirectTo.Count -ge 1)
{
$sRedirectTo=$aRedirectTo[0]
}
else
{
write-host ("No location URL in header")
break
}
if (-not [string]::IsNullOrEmpty($sRedirectTo))
{
write-host ("Redirect to {0}" -f ($sRedirectTo))
$sURL = $sRedirectTo
}
else
{
write-host ("location URL Null")
break
}
}
else
{
Write-Output ("OK Location = {1} HttpCode = {0}" -f $oWebResponse.StatusCode,$sRedirectTo )
break
}
}
while ($true)
Michael
My Knowledgebase for things about Linux, Windows, VMware, Electronic and so on…