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 버전에서 소개되었을 것입니다.
Seth

1
@Seth Both는 버전 3에서 도입되었습니다. 이것은 Get-Help두 cmdlet 의 페이지에서 찾을 수 있습니다 . Invoke-RestMethod"온라인 버전"링크의 Get-Help끝에는 Invoke-WebRequest페이지 에서 발견 된 것보다 작은 숫자가 있기 때문에 기술적으로 먼저 게시 된 것으로 추측합니다 .
root

답변:


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.