Invoke-WebRequest ve Invoke-RestMethod arasındaki fark nedir?


24

Invoke-WebRequestPowerShell'den REST tabanlı bir API'ye istek göndermek için başarıyla kullanıyorum .

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

Bugün, yaptığım şeye Invoke-RestMethoddaha uygun bir isim verdim. Fark nedir ve birini diğerine kullanmak için bir sebep var mı?


Invoke-RestMethod farklı bir parametre setine sahiptir. Ek olarak (her zaman söylemesi biraz zor) muhtemelen daha sonraki bir PowerShell sürümünde tanıtıldı.
Seth,

1
@Seth Her ikisi de sürüm 3'te tanıtıldı. Bu, Get-Helpher iki cmdlet'in sayfalarında da bulunabilir . Sonunda Invoke-RestMethod"Çevrimiçi Sürüm" bağlantısının sayfadaki Get-Helpsonuçtan daha küçük bir sayıya sahip olması nedeniyle teknik olarak ilk yayınlandığını tahmin ediyorum Invoke-WebRequest.
Kök

Yanıtlar:


30

Microsoft.PowerShell.Commands.UtilityMontajı açarak öğrenebilirsiniz .

Temel olarak, Invoke-WebRequestverileri bu kadar ayrıştırma ile ilgilenmez. Bununla birlikte -UseBasicParsing, bazı Regex tabanlı HTML ayrıştırma yapar. Bu anahtar olmadan, belgeyi ayrıştırmak için Internet Explorer COM API'sini kullanır.

Bu kadar. Her zaman HTML'yi ayrıştırmaya çalışır.

Invoke-RestMethodÖte yandan, JSON ve XML içeriğini desteklemek için kod vardır. Uygun bir kod çözücüyü algılamaya çalışır. O mu değil (tabii XML uyumlu HTML, hariç) HTML desteği.

Her ikisi de gerçek HTTP isteğini yapmak için aynı temel mantığı paylaşır. Bu sadece sonuç işlemede farklılık gösterdikleridir.

Görmek inanmaktır!

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 bir yaptı blog yazısı yaptı . Sonuç:

Invoke-RestMethodXML ve JSON sonuçlarıyla Invoke-WebRequestbaşa çıkmada daha iyidir, düz HTML sonuçlarıyla başa çıkarken daha iyidir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.