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

PowerShell equivalent van krul

Is er een equivalent van curl in PowerShell? Heeft het een soortgelijk ingebouwd vermogen of is er een cmdlet van een derde partij?

Antwoorden (8)

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

PowerShell 3.0 heeft de nieuwe opdracht Invoke-RestMethod: http://technet.microsoft.com/en-us/library/hh849971.aspx

meer details: 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

Vanaf Powershell 5.0, zo niet eerder, curl is een alias voor 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

Om het unaliased commando te gebruiken …

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

Dus geef verschillende eigenschappen van het verzoek als volgt terug …

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

… of alleen de inhoud …

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

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

De equivalente aliased commando’s zijn …

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

Leveraging Powershell defaults en andere aliassen die je zou kunnen verkorten tot

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

… maar ik zou het niet aanraden. Verbose commando’s helpen anderen bij het lezen van je code.

Update:

Powershell 6.x

Gebruik van Aliassen ontmoedigd

Vanaf Powershell 6.x “Core” curl is geen alias meer voor Invoke-WebRequest (de alias wget is ook verwijderd) . Gebruik in plaats daarvan Invoke-WebRequest direct.

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

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

Curl is niet langer een alias voor Invoke-WebRequest (getest op Powershell 6.2.3), ondanks een schijnbare afwijzing van een beweging in een RFC “om de aliassen krullen en wget te verwijderen uit Windows PowerShell” .

Dat RFC opmerkt “De wget/curl aliassen waren al verwijderd uit PowerShell Core, dus het probleem [van het hebben van die aliassen] was beperkt tot Windows PowerShell.”

In de conclusie moedigt het Powershell team ook gebruikers aan “om niet te vertrouwen op aliassen in scripts”.

Zoals @v6ak in het commentaar heeft opgemerkt kan het gebruik van curl en wget in PowerShell (5.0 of lager) een probleem zijn in: het onbedoeld aanroepen van de echte curl of wget als deze naast elkaar zijn geïnstalleerd; en, in ieder geval, verwarring veroorzaken.

Nieuwe codering

Het wordt aanbevolen om Powershell “core” (6.x of hoger) te upgraden om te kunnen profiteren van de standaard codering utf8NoBOM, bij gebruik van Invoke-WebRequest (en vele andere tekstuitvoercommando’s). Indien men dit expliciet doet kan men iets doen als:

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

Echter, zelfs wanneer men een korter, impliciet, commando gebruikt…

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

… wordt er gecodeerd met utf8NoBOM (dit kan men bijvoorbeeld controleren door het opgeslagen bestand te openen in Visual Studio Code en “UTF-8” in de statusbalk te observeren).

Bestanden opgeslagen met utf8NoBOM hebben de neiging om minder problemen te veroorzaken wanneer men door verschillende ecosystemen reist. Natuurlijk, als je een andere codering nodig hebt kun je een alternatief expliciet instellen.

In Powershell 5.0 en lager was de utf8NoBOM codering niet beschikbaar, laat staan de standaard.

Details:

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

De uitstekende Command Line Kung Fu blog heeft een post waar ze krul, wget en de gerelateerde PowerShell commando’s

vergelijken In een notendop:

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

Of, als uw versie van Powershell/.Net geen 2 parameters accepteert voor 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

U kunt ook Git voor Windows installeren en vervolgens de Git-bakmap in uw pad plaatsen. De Git-installatie omvat onder andere curl.exe. Zet %programfiles(x86)%\git\bin na de installatie gewoon in uw PATH. Vervolgens kunt u het curl commando van de Windows Command Prompt of PowerShell console gebruiken.

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

U kunt installeert cURL met Chocolatey en heeft krullen beschikbaar in PowerShell CLI of cmd.

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

krul

cmd, bash

curl -H "Host: whoami.local" 192.168.4.4

powerschelp

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

het dichtst bij wget of curl op ramen is bits (Background Intelligent Transfer Service), dat een aantal fragmenten klaar heeft voor powersclop.

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

Dit commando zou moeten werken:

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

Het maakt deel uit van Microsoft.PowerShell.Utility sinds PowerShell 3.0.

Zie ook: Haal $webclient.downloadstring om naar een tekstbestand te schrijven in Powershell .