PowerShell-为什么使用Invoke-WebRequest比使用浏览器下载慢得多?

eqzww0vc  于 2022-11-10  发布在  Shell
关注(0)|答案(5)|浏览(165)

我使用PowerShell的Invoke-WebRequest方法将文件从Amazon S3下载到我的Windows EC2示例。
如果我使用Chrome下载文件,我可以在5秒内下载一个200MB的文件。在PowerShell中使用Invoke-WebRequest下载相同的内容最多需要5分钟。
为什么使用Invoke-WebRequest会更慢,有没有办法在PowerShell脚本中全速下载?

dsf9zpds

dsf9zpds1#

在没有切换到Invoke-WebRequest的情况下,关闭进度条为我做到了这一点。我从这个帖子中找到了答案:https://github.com/PowerShell/PowerShell/issues/2138(jasongin在2016年10月3日评论)

$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest <params>

对于我在本地主机上的5MB文件,下载时间从30秒增加到250毫秒。
请注意,要使进度条回到活动的外壳中,您需要调用$ProgressPreference = 'Continue'

wqlqzqxt

wqlqzqxt2#

我用的是

Invoke-WebRequest $video_url -OutFile $local_video_url

我将上面的更改为

$wc = New-Object net.webclient
$wc.Downloadfile($video_url, $local_video_url)

这使下载速度恢复到我在浏览器中看到的速度。

g6ll5ycj

g6ll5ycj3#

$ProgressPreference = 'SilentlyContinue'我把这个从52分钟缩短到了14秒,一个450米的壮观文件。

nr9pn0ug

nr9pn0ug4#

将文件下载到临时目录的一行程序:

(New-Object Net.WebClient).DownloadFile("https://www.google.com", "$env:temp\index.html")
evrscar2

evrscar25#

我今天才碰到这个问题,如果你把Content Type参数改为应用程序/八位字节-流,速度会快得多(和使用WebClient一样快)。原因是Invoke-Request命令不会尝试将响应解析为JSON或XML。

Invoke-RestMethod -ContentType "application/octet-stream" -Uri $video_url  -OutFile $local_video_url

相关问题