PowerShell equivalente di curl
C'è un equivalente di curl
in PowerShell? Ha una capacità incorporata simile o c'è un cmdlet di terze parti?
C'è un equivalente di curl
in PowerShell? Ha una capacità incorporata simile o c'è un cmdlet di terze parti?
PowerShell 3.0 ha il nuovo comando Invoke-RestMethod
:
http://technet.microsoft.com/en-us/library/hh849971.aspx
maggiori dettagli: https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
A partire da Powershell 5.0, se non prima, curl
è un alias per 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
``` ```
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
Per utilizzare il comando senzaalias …
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
Quindi restituire diverse proprietà della richiesta come segue …
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
… o solo il contenuto …
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
``` ```
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
Gli equivalenti comandi con alias sono …
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
``` ```
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
Leveraging Powershell default e altri alias potreste accorciare i comandi a
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
… ma non lo consiglierei. I comandi Verbose aiutano gli altri nella lettura del codice.
Update:
A partire da Powershell 6.x “Core” curl
non è più un alias per Invoke-WebRequest
(l'alias wget
è anche rimosso) . Invece usare Invoke-WebRequest
direttamente.
&001 &001
Curl non è più un alias per Invoke-WebRequest (testato su Powershell 6.2.3), nonostante un apparente rifiuto di un movimento in un RFC “per rimuovere gli alias curl e wget da Windows PowerShell” .
Che RFC nota “Gli alias wget/curl sono già stati rimossi dal Core di PowerShell, quindi il problema [di avere questi alias] era limitato a Windows PowerShell”.
In conclusione il team di Powershell incoraggia anche gli utenti “a non fare affidamento sugli alias negli script”.
Come @v6ak ha notato nei commenti utilizzando curl
e wget
in PowerShell (5.0 o inferiore) può essere un problema in: invocare involontariamente il ricciolo reale o il wget se installato fianco a fianco; e, in ogni caso, causa confusione.
Si raccomanda di aggiornare il “core” di Powershell (6.x o superiore) per poter sfruttare la codifica predefinita utf8NoBOM
, quando si usa Invoke-WebRequest
(e molti altri comandi di testo in uscita). Se uno lo facesse esplicitamente si potrebbe fare qualcosa come:
&001 &001
Tuttavia, anche quando si usa un comando più breve, implicito, …
&001 &001
… la codifica con utf8NoBOM
sarà fatta (si può verificare questo, per esempio, aprendo il file salvato in Visual Studio Code e osservando “UTF-8” nella barra di stato).
I file salvati con utf8NoBOM
tendono a causare meno problemi quando si viaggia attraverso vari ecosistemi. Naturalmente, se avete bisogno di qualche altra codifica potete impostare esplicitamente qualche alternativa.
In Powershell 5.0 e abbassare la codifica utf8NoBOM
non era disponibile, per non parlare della codifica di default.
Dettagli:
L'eccellente Command Line Kung Fu blog ha un post dove si confrontano curl, wget e i relativi comandi PowerShell
In poche parole:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
O, se la vostra versione di Powershell/.Net non accetta 2 parametri per DownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
Si può anche installare Git for Windows , e poi mettere la cartella Git bin nel proprio percorso. L'installazione di Git include, tra le altre cose, curl.exe. Dopo l'installazione, basta mettere %programfiles(x86)%\git\bin
nel tuo PATH. Poi sarai in grado di usare il comando curl dalla console Command Prompt o PowerShell di Windows.
È possibile installare cURL con Chocolatey e avere l'arricciatura disponibile in PowerShell CLI o cmd
.
Questo comando dovrebbe funzionare:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
``` &001
Fa parte di [ Microsoft.PowerShell.Utility ](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-5.1) poiché PowerShell 3.0.
Vedi anche: [ Ottenere $webclient.downloadstring per scrivere su file di testo in Powershell ](https://stackoverflow.com/q/9365000/55075).