Invoke-WebRequest 和 Invoke-RestMethod 有什么区别?

Invoke-WebRequest 和 Invoke-RestMethod 有什么区别?

我已经成功使用Invoke-WebRequestPowerShell 向基于 REST 的 API 发布请求。

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

今天我偶然发现了Invoke-RestMethod一个更适合我所做事情的名字。它们有什么区别?有什么理由使用其中一个而不是另一个?

答案1

您可以通过反编译程序集来找到答案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

答案2

systemcenterautomation.com 做了关于此内容的博客文章。 结论:

Invoke-RestMethod在处理 XML 和 JSON 结果方面表现更好,而Invoke-WebRequest在处理直接 HTML 结果方面表现更好

相关内容