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


24

我已经成功地Invoke-WebRequest用于将请求从PowerShell发布到基于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两个cmdlet 的页面上找到。我猜想Invoke-RestMethod是第一个在技术上发布的,因为Get-Help结尾处的“在线版本”链接比在Invoke-WebRequest页面上的链接数少。

Answers:


30

您可以通过反Microsoft.PowerShell.Commands.Utility汇编程序来查找。

基本上,Invoke-WebRequest并不需要那么多地解析数据。使用-UseBasicParsing,它可以进行一些基于Regex的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

4

systemcenterautomation.com对此发表了一篇博客文章。结论:

Invoke-RestMethod在处理XML和JSON结果方面要好得多,而Invoke-WebRequest在处理直接HTML结果方面要好得多

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.