2011-10-10 11:19:21 +0000 2011-10-10 11:19:21 +0000
155
155

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?

Odpowiedzi (8)

104
104
104
2013-05-04 00:18:17 +0000

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/

46
46
46
2015-10-30 23:21:20 +0000

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:

Powershell 6.x

Użycie aliasów zniechęcało

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.

Nowe kodowanie

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:

29
29
29
2011-10-10 11:26:27 +0000

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"
15
15
15
2013-04-04 01:20:37 +0000

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.

14
14
14
2013-01-22 15:07:59 +0000

Możesz zainstalować cURL z Chocolatey i mieć curl dostępne w PowerShell CLI lub cmd.

1
1
1
2019-06-04 03:10:31 +0000

curl

cmd, bash

curl -H "Host: whoami.local" 192.168.4.4

powershell

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
1
1
1
2011-12-11 16:38:28 +0000

Najbliższą rzeczą do wget lub curl na oknach jest bity (Background Intelligent Transfer Service), który ma kilka fragmentów gotowych do powerhell'a.

0
0
0
2018-02-13 12:01:17 +0000

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 .