powershell - headers - invoke-webrequest no se reconoce
Powershell: ¿Por qué usar Invoke-WebRequest es mucho más lento que una descarga del navegador? (4)
Invoke-WebRequest
método Invoke-WebRequest
para descargar un archivo de Amazon S3 a mi instancia de Windows EC2.
Si descargo el archivo usando Chrome, puedo descargar un archivo de 200 MB en 5 segundos. La misma descarga en PowerShell utilizando Invoke-WebRequest
toma hasta 5 minutos.
¿Por qué el uso de Invoke-WebRequest
más lento y hay una manera de descargar a toda velocidad en un script de PowerShell?
Acabo de abordar este tema hoy, si cambias el argumento ContentType a application / octet-stream es mucho más rápido (tan rápido como usar webclient). La razón es porque el comando Invoke-Request no intentará analizar la respuesta como JSON o XML.
Invoke-RestMethod -ContentType "application/octet-stream" -Uri $video_url -OutFile $local_video_url
Estaba usando
Invoke-WebRequest $video_url -OutFile $local_video_url
Cambié lo anterior a
$wc = New-Object net.webclient
$wc.Downloadfile($video_url, $local_video_url)
Esto restauró la velocidad de descarga a lo que estaba viendo en mis navegadores.
Sin cambiar de Invoke-WebRequest, apagar la barra de progreso lo hizo por mí. Encontré la respuesta de este hilo: https://github.com/PowerShell/PowerShell/issues/2138 (jasongin comentado el 3 de octubre de 2016)
$ProgressPreference = ''SilentlyContinue''
Invoke-WebRequest <params>
Para mi archivo de 5MB en localhost, el tiempo de descarga pasó de 30 a 250 ms.
Tenga en cuenta que para volver a colocar la barra de progreso en el shell activo, debe llamar a $ProgressPreference = ''Continue''
.
Supongo que el razonamiento detrás de por qué Invoke-WebRequest es más lento es haciendo un análisis de estilo raspador de la página que está solicitando, mientras que el cliente web .NET solo está emitiendo una solicitud get y guardando la respuesta.
Invoke-WebRequest analiza las propiedades Content, ParsedHtml, Forms, InputFields, Links, Images, Scripts, AllElements, BaseResponse y StatusCode.
Muy buen article sobre raspado con Invoke-WebRequest.