How to get filename returned by a download link?

Viewed 199

When requesting https://aka.ms/win32-x64-user-stable in browser, it returns this filename "VSCodeUserSetup-x64-1.27.2.exe" to be saved.

I want to get this same info "VSCodeUserSetup-x64-1.27.2.exe" so I tried:

$webRequest = [net.WebRequest]::Create("https://aka.ms/win32-x64-user-stable")
$test = $webrequest.GetResponse()

But I'm getting error:

Exception calling "GetResponse" with "0" argument(s): "The underlying connection was closed: An unexpected error occurred on a send."

Is it the right method or what else ?

I don't understand why because I followed https://learn-powershell.net/2011/02/11/using-powershell-to-query-web-site-information/ and there is no arg given for GetResponse.

1 Answers

I can reproduce the problem by doing the following:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls11
$webRequest = [net.WebRequest]::Create("https://aka.ms/win32-x64-user-stable")
$test = $webrequest.GetResponse()

So it stands to reason this is a TLS issue. You can check the TLS version by running:

[Net.ServicePointManager]::SecurityProtocol

and if appropriate, try setting the TLS version as follows:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webRequest = [net.WebRequest]::Create("https://aka.ms/win32-x64-user-stable")
$test = $webrequest.GetResponse()

Example (TLS 1.1):

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls11
Write-host "TLS Version: $([Net.ServicePointManager]::SecurityProtocol)"
$webRequest = [net.WebRequest]::Create("https://aka.ms/win32-x64-user-stable")
$webRequest.GetResponse()

TLS Version: Tls11
Exception calling "GetResponse" with "0" argument(s): "The underlying connection was closed: An unexpected error occurred on a send."
At line:4 char:1
+ $webRequest.GetResponse()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

Example (TLS 1.2):

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Write-host "TLS Version: $([Net.ServicePointManager]::SecurityProtocol)"
$webRequest = [net.WebRequest]::Create("https://aka.ms/win32-x64-user-stable")
$webRequest.GetResponse()

TLS Version: Tls12


IsMutuallyAuthenticated : False
Cookies                 : {}
Headers                 : {Content-MD5, X-Cache, x-ms-blob-type, x-ms-lease-status...}
SupportsHeaders         : True
ContentLength           : 45189424
ContentEncoding         : 
ContentType             : application/x-msdownload
CharacterSet            : 
Server                  : ECAcc (lha/8DA7)
LastModified            : 12/09/2018 17:38:17
StatusCode              : OK
StatusDescription       : OK
ProtocolVersion         : 1.1
ResponseUri             : https://az764295.vo.msecnd.net/stable/f46c4c469d6e6d8c46f268d1553c5dc4b475840f/VSCodeUserSetup-x64-1.27.2.exe
Method                  : GET
IsFromCache             : False
Related