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

PowerShell equivalente di curl

C'è un equivalente di curl in PowerShell? Ha una capacità incorporata simile o c'è un cmdlet di terze parti?

Risposte (8)

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

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/

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

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:

Powershell 6.x

Uso degli Alias scoraggiato

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.

Nuova codifica

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:

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

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

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.

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

È possibile installare cURL con Chocolatey e avere l'arricciatura disponibile in PowerShell CLI o cmd.

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

curl

cmd, bash

curl -H "Host: whoami.local" 192.168.4.4

powerhell

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

la cosa più vicina a wget o curl sulle finestre è bits (Background Intelligent Transfer Service), che ha alcuni frammenti pronti per il powerhell.

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

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).