Вы можете узнать, декомпилировав Microsoft.PowerShell.Commands.Utility
сборку.
По сути, Invoke-WebRequest
не так уж много разбирается с данными. С помощью -UseBasicParsing
этого он выполняет анализ HTML на основе Regex. Без этого параметра он будет использовать COM API Internet Explorer для анализа документа.
Вот и все. Он всегда будет пытаться разобрать HTML.
Invoke-RestMethod
с другой стороны, есть код для поддержки содержимого JSON и XML. Он попытается обнаружить соответствующий декодер. Он не поддерживает HTML (за исключением XML-совместимого HTML, конечно).
Оба используют одну и ту же базовую логику для выполнения фактического HTTP-запроса. Только в обработке результатов они отличаются.
Видеть значит верить!
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