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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | $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…