Có tương đương với curl
PowerShell không? Liệu nó có một số khả năng tích hợp tương tự hoặc có một lệnh ghép ngắn của bên thứ 3 không?
Có tương đương với curl
PowerShell không? Liệu nó có một số khả năng tích hợp tương tự hoặc có một lệnh ghép ngắn của bên thứ 3 không?
Câu trả lời:
PowerShell 3.0 có lệnh mới Invoke-RestMethod
:
http://technet.microsoft.com/en-us/l Library / hh849971.aspx
chi tiết hơn:
https://discoposse.com/2012/06/30/powershell-invoke-restmethod-pocking-the-curl-in-your-shell/
curl
hoặc wget
trong Powershell.
Kể từ Powershell 5.0, nếu không phải trước đây, curl
là một bí danh cho Invoke-WebRequest
.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias curl -> Invoke-WebRequest
Alias iwr -> Invoke-WebRequest
Alias wget -> Invoke-WebRequest
Để sử dụng lệnh không thiên vị ...
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
Vì vậy, trả lại một số thuộc tính của yêu cầu như sau ...
PS> Invoke-WebRequest -Uri https://www.google.com
StatusCode : 200
StatusDescription : OK
Content : <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-AU"><head><meta content="text/html; charset=UTF-8"
http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/...
RawContent : HTTP/1.1 200 OK
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Vary: Accept-Encoding
... Hoặc chỉ nội dung ...
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Các lệnh bí danh tương đương là ...
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
Tận dụng mặc định Powershell và các bí danh khác mà bạn có thể rút ngắn các lệnh thành
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... nhưng tôi sẽ không đề xuất nó. Các lệnh dài dòng giúp người khác khi đọc mã của bạn.
Cập nhật:
Kể từ Powershell 6.x "Core" curl
không còn là bí danh cho Invoke-WebRequest
(bí danh wget
cũng bị xóa). Thay vào đó sử dụng Invoke-WebRequest
trực tiếp.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
Curl không còn là bí danh cho Invoke-WebRequest (đã được thử nghiệm trên Powershell 6.2.3), mặc dù đã từ chối rõ ràng một chuyển động trong RFC "để xóa bí danh curl và wget khỏi Windows PowerShell" .
RFC lưu ý rằng "Các bí danh wget / curl đã bị xóa khỏi PowerShell Core, do đó, vấn đề [có các bí danh đó] đã được giới hạn trong Windows PowerShell."
Trong kết luận, nhóm Powershell cũng khuyến khích người dùng "không dựa vào bí danh trong các tập lệnh".
Như @ v6ak đã lưu ý trong các nhận xét sử dụng curl
và wget
trong PowerShell (5.0 trở xuống) có thể là một vấn đề trong: vô tình gọi curl hoặc wget thực sự nếu được cài đặt cạnh nhau; và, trong mọi trường hợp, gây nhầm lẫn.
Bạn nên nâng cấp "lõi" Powershell (6.x trở lên) để tận dụng lợi thế của mã hóa mặc định utf8NoBOM
, khi sử dụng Invoke-WebRequest
(và nhiều lệnh xuất văn bản khác). Nếu ai đó đang làm điều này một cách rõ ràng, bạn có thể làm một cái gì đó như:
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
| Select-Object -ExpandProperty Content `
| Out-File jquery.fancybox.min.js `
-Encoding utf8NoBOM
Tuy nhiên, ngay cả khi sử dụng lệnh ngắn hơn, ẩn, ...
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
... mã hóa utf8NoBOM
sẽ được thực hiện (ví dụ, bạn có thể xác minh điều này bằng cách mở tệp đã lưu trong Visual Studio Code và quan sát "UTF-8" trong thanh trạng thái).
Các tệp được lưu với utf8NoBOM
xu hướng gây ra ít vấn đề hơn khi đi qua các hệ sinh thái khác nhau. Tất nhiên, nếu bạn cần một số mã hóa khác, bạn có thể đặt một số thay thế rõ ràng.
Trong Powershell 5.0 và thấp hơn utf8NoBOM
mã hóa không có sẵn, hãy để mặc định.
Chi tiết:
get-help curl
. Bạn sẽ thấy Invoke-WebRequest [-Uri] <Uri> ...
, với các dấu ngoặc []
chỉ ra -Uri
có thể bị bỏ qua (và do đó được gọi ngầm). Như tôi đã đề cập trong bài viết chính: nói chung bạn nên rõ ràng (nơi bạn hoặc người khác sẽ đọc mã của bạn trong tương lai).
[]
đã làm
get-help
được đưa ra trong một số phiên bản của en.wikipedia.org/wiki/Extends_Backus%E2%80%93Naur_form . Bạn sẽ làm tốt để đọc / đọc lướt bởi vì một số phiên bản của Extended Backus Naur Form có thể được sử dụng để mô tả cú pháp của nhiều ngôn ngữ bạn sẽ gặp. Bạn sẽ nhận thấy rằng tại en.wikipedia.org/wiki/ Đá ngoặc [ ...]
chỉ định cú pháp là tùy chọn.
Blog Kung Fu dòng lệnh tuyệt vời có một bài đăng nơi họ so sánh các lệnh curl, wget và các lệnh PowerShell có liên quan
Tóm lại:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
Hoặc, nếu phiên bản Powershell / .Net của bạn không chấp nhận 2 tham số cho DownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
DownloadFile
chức năng cũng hoạt động tốt.
Bạn cũng có thể cài đặt Git cho Windows , rồi đặt thư mục Git bin vào đường dẫn của bạn. Cài đặt Git bao gồm, trong số những thứ khác, curl.exe. Sau khi cài đặt, chỉ cần đặt %programfiles(x86)%\git\bin
PATH của bạn. Sau đó, bạn sẽ có thể sử dụng lệnh curl từ bảng điều khiển Windows Command Prompt hoặc PowerShell.
Bạn có thể cài đặt cURL với Chocolatey và có sẵn curl trong PowerShell CLI hoặc cmd
.
thứ gần nhất với wget
hoặc curl
trên các cửa sổ là các bit (Dịch vụ chuyển thông minh nền), trong đó có một số đoạn mã sẵn sàng cho quyền hạn.
Lệnh này sẽ hoạt động:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Đây là một phần của Microsoft.PowerShell.Utility kể từ PowerShell 3.0.
Xem thêm: Nhận $ webclient.doad chuỗi để ghi vào tệp văn bản trong Powershell .