PowerShell to odpowiednik curl
Czy w PowerShell jest odpowiednik curl
? Czy ma on jakieś podobne możliwości wbudowania, czy też istnieje cmdlet trzeciej strony?
Czy w PowerShell jest odpowiednik curl
? Czy ma on jakieś podobne możliwości wbudowania, czy też istnieje cmdlet trzeciej strony?
PowerShell 3.0 ma nowe polecenie Invoke-RestMethod
:
http://technet.microsoft.com/en-us/library/hh849971.aspx
więcej szczegółów: https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
As of Powershell 5.0, if not before, curl
is an alias for 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
To use the unaliased command …
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
So return several properties of the request as follows …
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
… lub tylko treść …
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Równoważne komendy aliasowe to …
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
Leveraging Powershell defaults and other aliases you could shorten the commands to
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
… but I wouldn’t recommend it. Komendy słowne pomagają innym podczas czytania Twojego kodu.
Update:
Od dnia Powershell 6.x “Core” curl
nie jest już aliasem dla Invoke-WebRequest
(alias wget
jest również usunięty) . Zamiast tego użyj bezpośrednio Invoke-WebRequest
.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
Curl nie jest już aliasem dla Invoke-WebRequest (testowany na Powershell 6.2.3), pomimo widocznego odrzucenia ruchu w RFC “aby usunąć alias curl i wget z Windows PowerShell” .
Że RFC zauważa “aliasy wget/curl zostały już usunięte z PowerShell Core, więc problem [posiadania tych aliasów] został ograniczony do Windows PowerShell.”
W podsumowaniu zespół Powershell zachęca również użytkowników, aby “nie polegali na aliasach w skryptach”.
Jak zauważył @v6ak w komentarzach użycie curl
i wget
w PowerShell'u (5.0 lub niżej) może być problemem w: niezamierzonym wywołaniu prawdziwego curl'a lub wget'a, jeśli jest zainstalowany obok siebie; i w każdym razie powoduje zamieszanie.
Zaleca się aktualizację PowerShell'a “core” (6.x lub wyżej) w celu skorzystania z domyślnego kodowania utf8NoBOM
, przy użyciu Invoke-WebRequest
(i wielu innych komend tekstowych). Jeśli ktoś robiłby to wyraźnie, mógłby zrobić coś w stylu:
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
Jednak nawet przy użyciu krótszej, domyślnej komendy …
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
… zostanie wykonane kodowanie za pomocą utf8NoBOM
(można to zweryfikować, na przykład otwierając zapisany plik w Visual Studio Code i obserwując “UTF-8” na pasku stanu).
Pliki zapisane za pomocą utf8NoBOM
zwykle powodują mniej problemów podczas podróży po różnych ekosystemach. Oczywiście, jeśli potrzebne jest inne kodowanie, można wyraźnie ustawić alternatywę.
W Powershell 5.0 i niższe kodowanie utf8NoBOM
nie było dostępne, nie mówiąc już o domyślnym.
Szczegóły:
Doskonały Command Line Kung Fu blog ma a post gdzie porównują one curl, wget i związane z nimi komendy PowerShell
W skrócie:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
Lub, jeśli Twoja wersja Powershell/.Net nie akceptuje 2 parametrów dla DownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
Możesz również zainstalować Git dla Windows , a następnie umieścić folder Git bin na swojej ścieżce. Instalacja Git zawiera między innymi curl.exe. Po zainstalowaniu, po prostu umieść %programfiles(x86)%\git\bin
na swojej ścieżce PATH. Wtedy będziesz mógł użyć polecenia curl.exe z konsoli Windows Command Prompt lub PowerShell.
Możesz zainstalować cURL z Chocolatey i mieć curl dostępne w PowerShell CLI lub cmd
.
To polecenie powinno zadziałać:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Jest częścią Microsoft.PowerShell.Utility od PowerShell 3.0.
Zobacz także: Get $webclient.downloadstring to write to text file in Powershell .