Apakah ada yang setara dengan curl
di PowerShell? Apakah ia memiliki kemampuan bawaan yang serupa atau ada cmdlet pihak ke-3?
Apakah ada yang setara dengan curl
di PowerShell? Apakah ia memiliki kemampuan bawaan yang serupa atau ada cmdlet pihak ke-3?
Jawaban:
PowerShell 3.0 memiliki perintah baru Invoke-RestMethod
:
http://technet.microsoft.com/en-us/library/hh849971.aspx
lebih detail:
https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
curl
atau wget
di Powershell sekarang.
Pada Powershell 5.0, jika tidak sebelumnya, curl
adalah alias untuk 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
Untuk menggunakan perintah yang tidak dihapus ...
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
Jadi kembalikan beberapa properti dari permintaan sebagai berikut ...
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
... atau hanya isinya ...
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Perintah alias yang setara adalah ...
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
Memanfaatkan default Powershell dan alias lain yang bisa Anda persingkat menjadi perintah
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... tapi saya tidak akan merekomendasikannya. Perintah Verbose membantu orang lain saat membaca kode Anda.
Memperbarui:
Pada Powershell 6.x "Core" curl
tidak lagi alias untuk Invoke-WebRequest
(alias wget
juga dihapus). Sebaliknya gunakan Invoke-WebRequest
langsung.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
Curl tidak lagi merupakan alias untuk Invoke-WebRequest (diuji pada Powershell 6.2.3), meskipun ada penolakan nyata terhadap suatu gerakan dalam RFC "untuk menghapus alias curl dan wget dari Windows PowerShell" .
RFC itu mencatat "Alias wget / curl sudah dihapus dari PowerShell Core sehingga masalah [memiliki alias itu] terbatas pada Windows PowerShell."
Sebagai kesimpulan, tim Powershell juga mendorong pengguna "untuk tidak bergantung pada alias dalam skrip".
Seperti @ v6ak telah catat dalam komentar menggunakan curl
dan wget
di PowerShell (5.0 atau lebih rendah) dapat menjadi masalah di: secara tidak sengaja memanggil ikal asli atau wget jika dipasang berdampingan; dan, bagaimanapun juga, menyebabkan kebingungan.
Disarankan Anda memutakhirkan Powershell "inti" (6.x atau lebih tinggi) agar dapat memanfaatkan pengodean default utf8NoBOM
, saat menggunakan Invoke-WebRequest
(dan banyak perintah keluaran teks lainnya). Jika seseorang melakukan ini secara eksplisit, Anda dapat melakukan sesuatu seperti:
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
Namun, bahkan ketika menggunakan perintah yang lebih pendek, implisit, ...
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
... penyandian dengan utf8NoBOM
akan dilakukan (Anda dapat memverifikasi ini, misalnya, dengan membuka file yang disimpan dalam Visual Studio Code dan mengamati "UTF-8" di bilah status).
File yang disimpan dengan utf8NoBOM
cenderung menyebabkan lebih sedikit masalah saat bepergian melalui berbagai ekosistem. Tentu saja, jika Anda memerlukan penyandian lain, Anda dapat menetapkan beberapa alternatif secara eksplisit.
Di Powershell 5.0 dan lebih rendah utf8NoBOM
penyandian tidak tersedia, apalagi default.
Detail:
get-help curl
. Anda akan melihat Invoke-WebRequest [-Uri] <Uri> ...
, dengan kurung []
menunjukkan -Uri
bisa ditinggalkan (dan karena itu secara implisit dipanggil). Seperti yang saya sebutkan di posting utama: secara umum Anda harus eksplisit (di mana Anda atau orang lain akan membaca kode Anda di masa depan).
[]
terjadi
get-help
diberikan dalam beberapa versi en.wikipedia.org/wiki/Extended_Backus%E2%808093Naur_form . Anda sebaiknya membaca / membaca skim itu karena beberapa versi Formulir Extended Backus Naur kemungkinan digunakan untuk menggambarkan sintaks banyak bahasa yang akan Anda temui. Anda akan melihat bahwa di en.wikipedia.org/wiki/... tanda kurung [ ...]
menetapkan sintaks yang opsional.
Blog Kung Fu Baris Perintah yang sangat baik memiliki pos tempat mereka membandingkan ikal, wget, dan perintah PowerShell terkait
Pendeknya:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
Atau, jika versi Powershell / .Net Anda tidak menerima 2 parameter untuk DownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
DownloadFile
fungsi yang juga berfungsi dengan baik.
Anda juga dapat menginstal Git untuk Windows , dan kemudian meletakkan folder bin Git di jalur Anda. Instal Git termasuk, antara lain, curl.exe. Setelah menginstal, cukup masukkan %programfiles(x86)%\git\bin
PATH Anda. Kemudian Anda akan dapat menggunakan perintah curl dari Windows Command Prompt atau PowerShell console.
Anda dapat menginstal cURL dengan Chocolatey dan memiliki curl di PowerShell CLI atau cmd
.
hal yang paling dekat dengan wget
atau curl
di windows adalah bits (Background Intelligent Transfer Service), yang memiliki beberapa cuplikan siap untuk PowerShell.
Perintah ini harus bekerja:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Itu bagian dari Microsoft.PowerShell.Utilitas sejak PowerShell 3.0.
Lihat juga: Dapatkan $ webclient.downloadstring untuk menulis ke file teks di Powershell .