Solución:
Puede averiguarlo descompilando el Microsoft.PowerShell.Commands.Utility
montaje.
Básicamente, Invoke-WebRequest
no se ocupa mucho de analizar los datos. Con -UseBasicParsing
, realiza un análisis de HTML basado en Regex. Sin este conmutador, utilizará la API COM de Internet Explorer para analizar el documento.
Eso es todo. Siempre intentará analizar HTML.
Invoke-RestMethod
por otro lado, tiene código para soportar contenido JSON y XML. Intentará detectar un decodificador apropiado. Lo hace no admite HTML (excepto HTML compatible con XML, por supuesto).
Ambos comparten la misma lógica central para realizar la solicitud HTTP real. Solo difieren en el procesamiento de resultados.
¡Ver es creer!
PS C:Usersfuzzy> (Invoke-RestMethod https://httpbin.org/headers).headers
Connection Host User-Agent
---------- ---- ----------
close httpbin.org Mozilla/5.0 (Windows NT; Windows NT 10.0; de-DE) WindowsPowerShell/5.1.15063.483
PS C:Usersfuzzy> Invoke-WebRequest -UseBasicParsing https://httpbin.org/headers
StatusCode : 200
StatusDescription : OK
Content : {
"headers": {
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (Windows NT; Windows NT 10.0; de-DE)
WindowsPowerShell/5.1.15063.483"
}
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
X-Processed-Time: 0.00075101852417
Content-Length: 180
Content-Type: application/json...
Forms :
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
true], [X-Processed-Time, 0.00075101852417]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml :
RawContentLength : 180
systemcenterautomation.com hizo una publicación de blog sobre esto. La conclusión:
Invoke-RestMethod
es mucho mejor para tratar con resultados XML y JSON, mientras queInvoke-WebRequest
es mejor para lidiar con resultados HTML directos