Яка різниця між Invoke-WebRequest та Invoke-RestMethod?


24

Я успішно використовую Invoke-WebRequestдля розміщення запитів до API на основі REST від PowerShell.

Invoke-WebRequest -UseBasicParsing https://my-rest-api.com/endpoint -ContentType "application/json" -Method POST -Body $json

Сьогодні я натрапив на Invoke-RestMethodзвуки, які звучать більш влучно, що я роблю. У чому різниця, і чи є причина використовувати одне над іншим?


Invoke-RestMethod має інший набір параметрів. Крім того (завжди трохи важко сказати), він, ймовірно, був представлений у більш пізній версії PowerShell.
Сет

1
@Seth Обидва були представлені у версії 3. Це можна знайти на Get-Helpсторінках обох командлетів. Я б міркував, що це Invoke-RestMethodбуло опубліковано технічно спочатку, оскільки "Інтернет-версія" посилання Get-Helpзакінчується меншим числом, ніж те, яке знайдено на Invoke-WebRequestсторінці сайту.
корінь

Відповіді:


30

Це можна дізнатися, розклавши Microsoft.PowerShell.Commands.Utilityзбірку.

В основному, Invoke-WebRequestне так сильно розбирає дані. З -UseBasicParsing, це робить деякий розбір HTML на основі Regex. Без цього перемикача він використовуватиме COM Internet API COM для аналізу документа.

Це воно. Він завжди намагатиметься розібрати 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

4

systemcenterautomation.com зробив про це в блозі . Висновок:

Invoke-RestMethodнабагато краще працювати з результатами XML та JSON, тоді Invoke-WebRequestяк краще мати справу з прямими результатами HTML

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.