我使用Powershell的Invoke-WebRequest
方法將文件從Amazon S3下載到我的Windows EC2實例。Powershell - 爲什麼使用調用WebRequest比瀏覽器下載慢得多?
如果我使用Chrome下載文件,我可以在5秒內下載200 MB文件。使用Invoke-WebRequest
的PowerShell中的相同下載最多需要5分鐘。
爲什麼使用Invoke-WebRequest
的速度較慢,有沒有辦法在PowerShell腳本中全速下載?
我使用Powershell的Invoke-WebRequest
方法將文件從Amazon S3下載到我的Windows EC2實例。Powershell - 爲什麼使用調用WebRequest比瀏覽器下載慢得多?
如果我使用Chrome下載文件,我可以在5秒內下載200 MB文件。使用Invoke-WebRequest
的PowerShell中的相同下載最多需要5分鐘。
爲什麼使用Invoke-WebRequest
的速度較慢,有沒有辦法在PowerShell腳本中全速下載?
我用
Invoke-WebRequest $video_url -OutFile $local_video_url
我改變了上面
$wc = New-Object net.webclient
$wc.Downloadfile($video_url, $local_video_url)
這恢復了下載速度是我在我的瀏覽器中看到。
我會假設爲什麼Invoke-WebRequest比較慢的原因是它對所請求的頁面進行刮取式分析,而.NET Web客戶端只是發出get請求並保存響應。 Invoke-WebRequest解析內容,ParsedHtml,Forms,InputFields,鏈接,圖像,腳本,AllElements,BaseResponse和StatusCode屬性。
很不錯article用Invoke-WebRequest進行搜索。
我今天剛剛遇到這個問題,如果您將ContentType參數更改爲application/octet-stream它會快得多(與使用webclient一樣快)。原因是因爲Invoke-Request命令不會嘗試將響應解析爲JSON或XML。
Invoke-RestMethod -ContentType "application/octet-stream" -Uri $video_url -OutFile $local_video_url
'-ContentType'僅用於'POST'請求AFAIK,所以它可能不會有所作爲。 – rednoah 2016-11-02 19:30:49
沒有切換離開Invoke-WebRequest,關閉進度條爲我做了。我發現從這個線程的答案:https://github.com/PowerShell/PowerShell/issues/2138(jasongin於2016年10月3日評論)
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest <params>
對於本地主機上我的5MB文件,下載時間從30多歲就到250毫秒。
請注意,要使進度條回到活動外殼中,您需要致電$ProgressPreference = 'Continue'
。
這對我們也有很大的影響(對於10-30MB的文件,幾十秒鐘到不到一秒) - 我總是懷疑是進度顯示放慢了速度,但不知道如何阻止它它。 – 2017-12-16 12:20:02
是否將IE配置爲使用Chrome不在您的系統上的代理? – alroc 2015-02-23 20:44:20
@alroc文件在IE中以與Chrome相同的速度下載。它只會減慢使用'Invoke-WebRequest' – 2015-02-23 20:51:13
請顯示您的代碼。在PowerShell中進行下載時,您看到了什麼樣的內存利用率? – alroc 2015-02-23 20:51:45