มีcurl
PowerShell ที่เทียบเท่าหรือไม่ มันมีความสามารถในตัวที่คล้ายกันหรือมี cmdlet ของบุคคลที่สามหรือไม่
มีcurl
PowerShell ที่เทียบเท่าหรือไม่ มันมีความสามารถในตัวที่คล้ายกันหรือมี cmdlet ของบุคคลที่สามหรือไม่
คำตอบ:
PowerShell 3.0 มีคำสั่งใหม่Invoke-RestMethod
:
http://technet.microsoft.com/en-us/library/hh849971.aspx
รายละเอียดเพิ่มเติม:
https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
curl
หรือwget
ใน Powershell ในขณะนี้
ในฐานะของ Powershell 5.0 หากไม่ได้ก่อนเป็นนามแฝงสำหรับcurl
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
วิธีใช้คำสั่ง unaliased ...
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
ดังนั้นส่งคืนคุณสมบัติหลายประการของคำขอดังต่อไปนี้ ...
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
... หรือเพียงแค่เนื้อหา ...
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
คำสั่ง aliased ที่เทียบเท่าคือ ...
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
การใช้ประโยชน์จาก Powershell ค่าเริ่มต้นและนามแฝงอื่น ๆ ที่คุณสามารถทำให้คำสั่งสั้นลงได้
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... แต่ฉันไม่อยากจะแนะนำ คำสั่งอย่างละเอียดช่วยให้ผู้อื่นเมื่ออ่านรหัสของคุณ
ปรับปรุง:
ในฐานะของPowershell 6.x "Core" curl
จะไม่เป็นชื่อแทนอีกต่อไปInvoke-WebRequest
( wget
จะลบชื่อแทนออก) ใช้แทนInvoke-WebRequest
โดยตรง
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
Curl ไม่ได้เป็นนามแฝงสำหรับวิงวอน-WebRequest (การทดสอบเกี่ยวกับ Powershell 6.2.3) แม้จะมีการปฏิเสธชัดเจนของการเคลื่อนไหวในการอื่นRFC "เพื่อที่จะลบชื่อแทนขดและ wget จาก Windows PowerShell"
RFC นั้นตั้งข้อสังเกตว่า "นามแฝง wget / curl ถูกลบออกจาก PowerShell Core แล้วดังนั้นปัญหา [การมีนามแฝงเหล่านั้น] นั้น จำกัด อยู่ที่ Windows PowerShell"
ในบทสรุปทีม Powershell ยังสนับสนุนให้ผู้ใช้ "ไม่พึ่งพานามแฝงในสคริปต์"
ในฐานะที่เป็น @ v6ak ได้ระบุไว้ในความคิดเห็นที่ใช้curl
และwget
ใน PowerShell (5.0 หรือต่ำกว่า) อาจมีปัญหาใน: การเรียกใช้ขดจริงหรือ wget โดยไม่ตั้งใจถ้าติดตั้งเคียงข้างกัน; และในกรณีใด ๆ ทำให้เกิดความสับสน
ขอแนะนำให้คุณอัพเกรด Powershell "core" (6.x หรือสูงกว่า) เพื่อใช้ประโยชน์จากการเข้ารหัสเริ่มต้นutf8NoBOM
เมื่อใช้Invoke-WebRequest
(และคำสั่งการส่งข้อความอื่น ๆ อีกมากมาย) หากมีใครทำสิ่งนี้อย่างชัดเจนคุณสามารถทำสิ่งที่ชอบ:
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
อย่างไรก็ตามแม้เมื่อใช้คำสั่งที่สั้นกว่าโดยปริยาย ...
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
... การเข้ารหัสด้วยutf8NoBOM
จะเสร็จสิ้น (คุณสามารถตรวจสอบสิ่งนี้ได้เช่นโดยการเปิดไฟล์ที่บันทึกใน Visual Studio Code และสังเกต "UTF-8" ในแถบสถานะ)
ไฟล์ที่บันทึกด้วยutf8NoBOM
มักจะทำให้เกิดปัญหาน้อยลงเมื่อเดินทางผ่านระบบนิเวศต่างๆ แน่นอนถ้าคุณต้องการการเข้ารหัสอื่น ๆ คุณสามารถกำหนดทางเลือกบางอย่างได้อย่างชัดเจน
ใน Powershell 5.0 และต่ำกว่าการutf8NoBOM
เข้ารหัสไม่พร้อมใช้งานให้เริ่มต้นโดยลำพัง
รายละเอียด:
get-help curl
คุณสามารถดูนี้ผ่านการมองหาที่ คุณจะเห็นInvoke-WebRequest [-Uri] <Uri> ...
ด้วยวงเล็บ[]
ที่ระบุ-Uri
สามารถด้านซ้ายออก (และดังนั้นจึงเรียกโดยปริยาย) ตามที่ฉันพูดถึงในโพสต์หลัก: โดยทั่วไปคุณควรมีความชัดเจน (ที่คุณหรือคนอื่น ๆ จะอ่านรหัสของคุณในอนาคต)
[]
ไม่ได้
get-help
จะได้รับในรุ่นของบางen.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form คุณควรอ่าน / อ่านอย่างแผ่วเบาเนื่องจากมีบางเวอร์ชันของ Extended Backus Naur Form ที่ใช้ในการอธิบายไวยากรณ์ของหลายภาษาที่คุณเจอ คุณจะสังเกตเห็นว่าที่en.wikipedia.org/wiki/…วงเล็บใหญ่[ ...]
กำหนดไวยากรณ์ที่เป็นตัวเลือก
บล็อก Command Line Kung Fu ที่ยอดเยี่ยมมีการโพสต์ที่จะเปรียบเทียบ curl, wget และคำสั่ง PowerShell ที่เกี่ยวข้อง
โดยสังเขป:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
หรือหาก Powershell / .Net เวอร์ชันของคุณไม่ยอมรับพารามิเตอร์ 2 ตัวสำหรับDownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
คุณยังสามารถติดตั้งGit สำหรับ Windowsแล้วใส่โฟลเดอร์ Git bin ลงในพา ธ ของคุณ การติดตั้ง Git นั้นรวมถึง curl.exe หลังจากติดตั้งเพียงแค่ใส่%programfiles(x86)%\git\bin
PATH ของคุณ จากนั้นคุณจะสามารถใช้คำสั่ง curl จากคอนโซล Windows Command Prompt หรือ PowerShell
คุณสามารถติดตั้งม้วนกับ chocolateyและมีขดที่มีอยู่ใน PowerShell CLI cmd
หรือ
สิ่งที่ใกล้เคียงที่สุดไปยังwget
หรือcurl
บน windows คือบิต (Background Intelligent Transfer Service) ซึ่งมีตัวอย่างบางส่วนที่พร้อมสำหรับ PowerShell
คำสั่งนี้ควรทำงาน:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
มันเป็นส่วนหนึ่งของMicrosoft.PowerShell.Utilityตั้งแต่ PowerShell 3.0
ดูเพิ่มเติม: รับ $ webclient.downloadstring การเขียนไปยังแฟ้มข้อความใน Powershell
curl -H "Host: whoami.local" 192.168.4.4
Invoke-WebRequest -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4
# or
# $(Get-Command curl) return "curl -> Invoke-WebRequest"
curl -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4