Sự khác biệt giữa Invoke-WebRequest và Invoke-RestMethod là gì?


24

Tôi đã sử dụng thành công Invoke-WebRequestđể gửi yêu cầu lên API dựa trên REST từ PowerShell.

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

Hôm nay tôi đã đi qua Invoke-RestMethodmà âm thanh được đặt tên thích hợp hơn cho những gì tôi đang làm. Sự khác biệt là gì, và có một lý do để sử dụng cái này hơn cái kia không?


Invoke-RestMethod có một bộ tham số khác. Ngoài ra (luôn luôn hơi khó nói) có lẽ nó đã được giới thiệu trong phiên bản PowerShell sau này.
Seth

1
@Seth Cả hai đã được giới thiệu trong phiên bản 3. Điều này có thể được tìm thấy trên các Get-Helptrang cho cả hai lệnh ghép ngắn. Tôi đoán rằng Invoke-RestMethodđã được xuất bản về mặt kỹ thuật trước tiên, vì liên kết "Phiên bản trực tuyến" ở Get-Helpcuối có số lượng nhỏ hơn số được tìm thấy trên Invoke-WebRequesttrang của.
root

Câu trả lời:


30

Bạn có thể tìm ra bằng cách dịch ngược cụm Microsoft.PowerShell.Commands.Utility.

Về cơ bản, Invoke-WebRequestkhông đối phó với việc phân tích dữ liệu nhiều như vậy. Với -UseBasicParsing, nó thực hiện một số phân tích HTML dựa trên Regex. Nếu không có công tắc này, nó sẽ sử dụng API COM của Internet Explorer để phân tích tài liệu.

Đó là nó. Nó sẽ luôn cố phân tích HTML.

Invoke-RestMethodmặt khác có mã để hỗ trợ nội dung JSON và XML. Nó sẽ cố gắng phát hiện một bộ giải mã thích hợp. Nó không hỗ trợ HTML (tất nhiên trừ HTML tuân thủ XML).

Cả hai đều có chung logic cốt lõi để thực hiện yêu cầu HTTP thực tế. Chỉ trong xử lý kết quả mà chúng khác nhau.

Nhìn thấy là tin tưởng!

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.