Я успешно использую Invoke-WebRequest
для отправки запросов в API на основе REST из PowerShell.
Invoke-WebRequest -UseBasicParsing https://my-rest-api.com/endpoint -ContentType "application/json" -Method POST -Body $json
Сегодня я наткнулся на то, Invoke-RestMethod
что звучит более метко для того, что я делаю. В чем разница, и есть ли причина использовать один над другим?
Get-Help
страницах обоих командлетов. Я бы предположил, что этоInvoke-RestMethod
было технически опубликовано в первую очередь, так как ссылка «Онлайн-версия»Get-Help
заканчивается на меньшее число, чем найденное наInvoke-WebRequest
странице.Ответы:
Вы можете узнать, декомпилировав
Microsoft.PowerShell.Commands.Utility
сборку.По сути,
Invoke-WebRequest
не так уж много разбирается с данными. С помощью-UseBasicParsing
этого он выполняет анализ HTML на основе Regex. Без этого параметра он будет использовать COM API Internet Explorer для анализа документа.Вот и все. Он всегда будет пытаться разобрать HTML.
Invoke-RestMethod
с другой стороны, есть код для поддержки содержимого JSON и XML. Он попытается обнаружить соответствующий декодер. Он не поддерживает HTML (за исключением XML-совместимого HTML, конечно).Оба используют одну и ту же базовую логику для выполнения фактического HTTP-запроса. Только в обработке результатов они отличаются.
Видеть значит верить!
источник
systemcenterautomation.com сделал сообщение в блоге об этом . Вывод:
источник