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

PowerShell-Äquivalent von Curl

Gibt es ein Äquivalent von curl in PowerShell? Verfügt PowerShell über eine ähnliche integrierte Funktion oder gibt es ein Cmdlet eines Drittanbieters?

Antworten (8)

104
104
104
2013-05-04 00:18:17 +0000
46
46
46
2015-10-30 23:21:20 +0000

Ab Powershell 5.0, wenn nicht schon vorher, ist curl ein Alias für 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

Um den Befehl unaliased zu verwenden …

PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com

So geben Sie mehrere Eigenschaften der Anforderung wie folgt zurück …

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

… oder nur den Inhalt …

PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content

<!doctype html><html itemscope="" itemtype="http://schem[etc ...]

Die äquivalenten Aliasing-Befehle sind …

PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content

Unter Verwendung der Powershell-Standardwerte und anderer Aliase könnten Sie die Befehle auf

PS> curl https://www.google.com 
ps> curl https://www.google.com | Select -ExpandProperty Content

kürzen … aber ich würde es nicht empfehlen. Ausführliche Befehle helfen anderen beim Lesen Ihres Codes.

Update:

Powershell 6.x

Verwendung von Aliasen wird abgeraten

Ab Powershell 6.x “Core” curl ist kein Alias mehr für Invoke-WebRequest (der Alias wget wird ebenfalls entfernt) . Stattdessen verwenden Sie Invoke-WebRequest direkt.

PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize

CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest

Curl ist nicht mehr ein Alias für Invoke-WebRequest (getestet an Powershell 6.2.3), trotz einer scheinbaren Ablehnung eines Antrags in einem RFC “to remove the aliases curl and wget from Windows PowerShell” .

Der RFC merkt an: “Die Aliase wget/curl wurden bereits aus dem PowerShell Core entfernt, so dass das Problem [mit diesen Aliasen] auf Windows PowerShell beschränkt war.”

In der Schlussfolgerung ermutigt das Powershell-Team die Benutzer auch, “sich nicht auf Aliase in Skripts zu verlassen”.

Wie @v6ak in den Kommentaren bemerkt hat, kann die Verwendung von curl und wget in PowerShell (5.0 oder niedriger) in folgenden Fällen ein Problem darstellen: unbeabsichtigtes Aufrufen des echten Curl oder wget, wenn diese nebeneinander installiert sind; und in jedem Fall führt dies zu Verwirrung.

Neue Kodierung

Es wird empfohlen, den Powershell-“Kern” (6.x oder höher) zu aktualisieren, um die Vorteile der Standardkodierung utf8NoBOM zu nutzen, wenn Invoke-WebRequest (und viele andere Textausgabebefehle) verwendet wird. Wenn man dies explizit tun würde, könnte man etwa so etwas tun wie:

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

Aber selbst bei Verwendung eines kürzeren, impliziten Befehls …

Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js

… wird die Kodierung mit utf8NoBOM durchgeführt (Sie können dies z.B. überprüfen, indem Sie die gespeicherte Datei in Visual Studio Code öffnen und “UTF-8” in der Statusleiste beobachten).

Mit utf8NoBOM gespeicherte Dateien neigen dazu, weniger Probleme zu verursachen, wenn sie durch verschiedene Ökosysteme reisen. Wenn Sie eine andere Kodierung benötigen, können Sie natürlich explizit eine Alternative festlegen.

In Powershell 5.0 und niedriger war die Kodierung von utf8NoBOM nicht verfügbar, geschweige denn die Standardkodierung.

Details:

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

Der ausgezeichnete Kommandozeilen-Kung-Fu-Blog hat einen Beitrag , in dem sie curl, wget und die verwandten PowerShell-Befehle vergleichen

In Kürze:

(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")

Oder, falls Ihre Version von Powershell/.Net zwei Parameter für DownloadString nicht akzeptiert:

(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

Sie können auch Git für Windows installieren und dann den Ordner Git bin in Ihrem Pfad ablegen. Die Git-Installation enthält unter anderem curl.exe. Nach der Installation legen Sie einfach %programfiles(x86)%\git\bin in Ihren PATH. Dann können Sie den Befehl curl von der Windows-Eingabeaufforderung oder der PowerShell-Konsole aus verwenden.

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

Sie können cURL mit Chocolatey installieren und Curl in PowerShell CLI oder cmd verfügbar haben.

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

Das, was wget oder curl auf Fenstern am nächsten kommt, ist bits (Background Intelligent Transfer Service), das einige Schnipsel für die Powershell bereithält.

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

Dieser Befehl sollte funktionieren:

Invoke-WebRequest -UseBasicParsing -Uri http://example.com/

Er ist seit PowerShell 3.0 Teil von Microsoft.PowerShell.Utility .

Siehe auch: Holen Sie sich $webclient.downloadstring, um in eine Textdatei in Powershell zu schreiben .