curl
PowerShell'de bir eşdeğeri var mı ? Bazı benzer yeteneklere sahip mi, yoksa 3. taraf cmdlet var mı?
curl
PowerShell'de bir eşdeğeri var mı ? Bazı benzer yeteneklere sahip mi, yoksa 3. taraf cmdlet var mı?
Yanıtlar:
PowerShell 3.0'ın yeni komutu var Invoke-RestMethod
:
http://technet.microsoft.com/en-us/library/hh849971.aspx
daha fazla detay:
https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
curl
ya da takma adı da verildi wget
.
Powershell 5.0 itibarıyla, curl
daha önce değilse, bunun bir takma adıdır 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 komutunu kullanmak için ...
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
Yani isteğin çeşitli özelliklerini aşağıdaki gibi döndür ...
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
... ya da sadece içerik ...
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Eşdeğer takma komutlar ...
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
Powershell varsayılanlarını ve diğer takma adlarını kullanarak komutları kısaltabilirsiniz.
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... ama bunu tavsiye etmem. Ayrıntılı komutlar, kodunuzu okurken başkalarına yardımcı olur.
Güncelleme:
İtibariyle PowerShell 6. x "Çekirdek" curl
artık için bir takma ad Invoke-WebRequest
(diğer adı wget
da kaldırılır). Bunun yerine Invoke-WebRequest
doğrudan kullanın .
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
Curl, artık bir RFC'de "takmaların kıvrılması ve Windows PowerShell'den silinmesi için" bir hareketin açıkça görülmesine rağmen ", Invoke-WebRequest (Powershell 6.2.3'te test edilmiştir) için bir diğer ad değildir .
RFC, "wget / curl takma adlarının zaten PowerShell Core'dan kaldırıldığını, bu nedenle [bu takma adlara sahip olma] sorunu Windows PowerShell ile sınırlandırıldığını" belirtti.
Sonuçta Powershell ekibi, kullanıcıları "komut dosyalarındaki diğer adlara güvenmemeleri" konusunda da teşvik eder.
@ V6ak, PowerShell'i (5.0 veya daha düşük) kullanan curl
ve kullanan yorumlarda da belirtildiği gibi, wget
bir sorun olabilir: istemeden yan yana kuruluysa gerçek kıvrılmayı veya wget'i çağırmak; ve her durumda karışıklığa neden olur.
utf8NoBOM
Kullanırken Invoke-WebRequest
(ve diğer birçok metin çıkış komutları) varsayılan kodlamadan yararlanmak için Powershell "core" (6.x veya üstü) yükseltmeniz önerilir . Eğer biri bunu açıkça yapıyorsa, şöyle bir şey yapabilirsiniz:
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
Ancak, daha kısa, örtük, komut kullanırken bile ...
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
... ile kodlama utf8NoBOM
yapılacaktır (örneğin, Visual Studio Kodunda kaydedilmiş dosyayı açıp durum çubuğunda "UTF-8" i izleyerek bunu doğrulayabilirsiniz).
Birlikte kaydedilen dosyalar utf8NoBOM
, çeşitli ekosistemler arasında seyahat ederken daha az soruna neden olma eğilimindedir. Elbette, başka bir kodlamaya ihtiyaç duyarsanız, açıkça bazı alternatifler belirleyebilirsiniz.
Powershell 5.0 ve daha düşük sürümlerde utf8NoBOM
kodlama kullanılamıyor, varsayılan değer değil.
Detaylar:
get-help curl
. Göreceksiniz Invoke-WebRequest [-Uri] <Uri> ...
, parantez içinde []
belirteçlerin -Uri
bırakılabildiğini (ve dolayısıyla dolaylı olarak çağrıldığınızı) göreceksiniz . Ana postada bahsettiğim gibi: genel olarak açık olmalısınız (gelecekte sizin veya başkalarının kodunuzu okuyacağı yer).
[]
yaptı
get-help
, en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form'un bazı sürümlerinde verilmiştir . Genişletilmiş Backus Naur Formunun bazı sürümlerinin, karşılaşacağınız birçok dilin sözdizimini tanımlamak için kullanıldığı için, okuma / yağmalamayı iyi yapacaksınız. En.wikipedia.org/wiki/… adresinde parantezlerin [ ...]
isteğe bağlı bir sözdizimi oluşturduğunu fark edeceksiniz .
Mükemmel Komut Satırı Kung Fu blogu, kıvrım, yazı ve ilgili PowerShell komutlarını karşılaştırdıkları bir gönderiye sahiptir.
Kısaca:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
Veya, eğer Powershell / .Net versiyonunuz 2 parametre kabul etmiyorsa DownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
DownloadFile
iyi çalışan fonksiyondan da bahseder .
Git for Windows programını yükleyebilir ve ardından Git kutusu klasörünü yolunuza koyabilirsiniz. Git kurulumu, diğerlerinin yanı sıra curl.exe dosyasını da içerir. Kurduktan sonra %programfiles(x86)%\git\bin
PATH'inizi girin. Daha sonra Windows Komut İstemi veya PowerShell konsolundan curl komutunu kullanabileceksiniz.
Şunları yapabilirsiniz chocolatey ile cURL kurmak ve PowerShell CLI veya mevcut bukle var cmd
.
en yakın şey wget
veya curl
pencerelerin üzerinde bit powershell hazır bazı pasajları vardır (Arka Plan Akıllı Aktarım Hizmeti).
Bu komut çalışması gerekir:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
PowerShell 3.0'dan bu yana Microsoft.PowerShell.Utility'nin bir parçasıdır .
Ayrıca bakınız: Powershell'deki metin dosyasına yazmak için $ webclient.downloadstring dosyasını edinin .