Czy istnieje odpowiednik programu curl
PowerShell? Czy ma podobne wbudowane możliwości, czy jest też polecenie cmdlet innej firmy?
Czy istnieje odpowiednik programu curl
PowerShell? Czy ma podobne wbudowane możliwości, czy jest też polecenie cmdlet innej firmy?
Odpowiedzi:
Program 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/
curl
lub wget
w Powershell.
Począwszy od Powershell 5.0, jeśli nie wcześniej, curl
jest to alias dla 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
Aby użyć niezmienionego polecenia ...
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
Zwróć więc kilka właściwości żądania w następujący sposób ...
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 po prostu treść ...
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Równoważne polecenia aliasu to ...
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
Wykorzystując wartości domyślne programu PowerShell i inne aliasy, do których możesz skrócić polecenia
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... ale nie poleciłbym tego. Pełne polecenia pomagają innym podczas odczytywania kodu.
Aktualizacja:
Począwszy od Powershell 6.x „Core” curl
nie jest już aliasem dla Invoke-WebRequest
(alias wget
jest również usuwany). Zamiast tego użyj Invoke-WebRequest
bezpośrednio.
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 w Powershell 6.2.3), pomimo pozornego odrzucenia ruchu w RFC „aby usunąć curl i wget z Windows PowerShell” .
RFC zauważa: „Aliasy wget / curl zostały już usunięte z programu PowerShell Core, więc problem [posiadania tych aliasów] ograniczał się do Windows PowerShell”.
Podsumowując, zespół Powershell zachęca również użytkowników, by „nie polegali na aliasach w skryptach”.
Jak zauważył @ v6ak w komentarzach przy użyciu curl
iw programie wget
PowerShell (5.0 lub nowszym ) może być problem w: niezamierzonym wywołaniu prawdziwego zwijania lub wget, jeśli jest instalowany obok siebie; i w każdym razie powoduje zamieszanie.
Zaleca się aktualizację „rdzenia” programu PowerShell (6.x lub nowszy), aby skorzystać z domyślnego kodowania utf8NoBOM
podczas używania Invoke-WebRequest
(i wielu innych poleceń do wysyłania tekstu). Jeśli ktoś robi to wprost, możesz zrobić coś takiego:
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ótszego, domyślnego polecenia ...
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
... utf8NoBOM
zostanie wykonane kodowanie za pomocą (możesz to zweryfikować, na przykład otwierając zapisany plik w programie Visual Studio Code i obserwując „UTF-8” na pasku stanu).
Pliki zapisane za pomocą utf8NoBOM
zwykle powodują mniej problemów podczas podróży przez różne ekosystemy. Oczywiście, jeśli potrzebujesz innego kodowania, możesz jawnie ustawić alternatywę.
W Powershell 5.0 i niższych utf8NoBOM
kodowanie nie było dostępne, nie mówiąc już o domyślnym.
Detale:
get-help curl
. Zobaczysz Invoke-WebRequest [-Uri] <Uri> ...
, ze nawiasami []
wskazującymi -Uri
można pominąć (i dlatego niejawnie wywołać). Jak wspomniałem w głównym poście: ogólnie powinieneś być wyraźny (tam, gdzie ty lub inni zamierzacie przeczytać swój kod w przyszłości).
[]
zrobił
get-help
się w niektórych wersjach en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form . Zrobisz to dobrze, czytając / przeglądając to, ponieważ pewna wersja formularza Extended Backus Naur Form jest prawdopodobnie używana do opisania składni wielu języków, które napotkasz. Zauważysz, że na en.wikipedia.org/wiki/… nawiasy [ ...]
oznaczają składnię, która jest opcjonalna.
Doskonały blog Kung Fu z wiersza poleceń zawiera post, w którym porównuje curl, wget i powiązane polecenia 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"
DownloadFile
funkcji, która również działa dobrze.
Możesz również zainstalować Git dla Windows , a następnie umieścić folder Git bin na swojej ścieżce. Instalacja Git obejmuje między innymi curl.exe. Po instalacji, po prostu %programfiles(x86)%\git\bin
wprowadź swoją ŚCIEŻKĘ. Następnie będziesz mógł użyć polecenia curl z wiersza polecenia systemu Windows lub konsoli PowerShell.
Możesz zainstalować cURL z Chocolatey i mieć dostępne curl w PowerShell CLI lub cmd
.
najbliższą rzeczą wget
lub curl
w systemie Windows są bity (Usługa inteligentnego transferu w tle), która ma kilka fragmentów gotowych na PowerShell.
To polecenie powinno działać:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Jest częścią Microsoft.PowerShell.Utility od PowerShell 3.0.
Zobacz także: Pobierz $ webclient.downloadstring, aby napisać do pliku tekstowego w Powershell .