В Powershell есть ли согласованный способ получить загруженное имя файла с помощью $ webRequest - PullRequest
0 голосов
/ 09 октября 2018

Этот вопрос не повторяется, так как он не работает

$FileName = [System.IO.Path]::GetFileName((Get-RedirectedUrl "https://aka.ms/win32-x64-user-stable"))

Для VSCode имя файла можно найти в ResponseUri.Segments

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

$uri
stable/ 
431ef9da3cf88a7e164f9d33bf62695e07c6c2a9/
VSCodeUserSetup-x64-1.28.0.exe

, но для сегмента пряжи это не таксодержит MSI-файл:

$url="https://yarnpkg.com/latest.msi"
$webRequest = [net.WebRequest]::Create($url)
$uri = $webrequest.GetResponse().ResponseUri.Segments

$uri
49970642/ 
776b5c00-c14c-11e8-934a-d10abe0380bf

Очевидно, что браузер может это сделать.

Может быть, есть что-то лучше, чем веб-запрос?

1 Ответ

0 голосов
/ 10 октября 2018

Powershell (WebRequest) автоматически перенаправляет, если есть один или несколько прыжков.Рекомендуемый способ получения предлагаемого имени файла - использовать заголовок Content-Disposition (yarnpkg.com поддерживает его):

#sometimes request is rejected due to security
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

$url="https://yarnpkg.com/latest.msi"
$WebRequest = [System.Net.WebRequest]::Create($url)
$Response = $WebRequest.GetResponse()
$dispositionHeader = $Response.Headers['Content-Disposition']
$disposition = [System.Net.Mime.ContentDisposition]::new($dispositionHeader)
$Response.Dispose()

$disposition.FileName #this is suggested FileName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...