Você pode descobrir descompilando o assembly Microsoft.PowerShell.Commands.Utility
.
Basicamente, Invoke-WebRequest
não lida com a análise dos dados. Com -UseBasicParsing
, ele faz algumas análises de HTML baseadas em Regex. Sem essa opção, usará a API COM do Internet Explorer para analisar o documento.
É isso. Sempre tentará analisar o HTML.
Por outro lado, Invoke-RestMethod
tem código para suportar conteúdo JSON e XML. Ele tentará detectar um decodificador apropriado. Não não suporta HTML (exceto para HTML compatível com XML, é claro).
Ambos compartilham a mesma lógica central para fazer a solicitação HTTP real. É apenas no processamento de resultados que eles diferem.
Ver é acreditar!
PS C:\Users\fuzzy> (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:\Users\fuzzy> 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