Invoke-WebRequestとInvoke-RestMethodの違いは何ですか?


24

Invoke-WebRequestPowerShellからRESTベースのAPIにリクエストを投稿するのに成功しています。

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解析が行われます。このスイッチがない場合、Internet Explorer COM APIを使用してドキュメントを解析します。

それでおしまい。常に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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.