PowerShell:
Einen HTTP-Request senden

How to:

Hier ein einfaches Beispiel, wie man eine GET-Anfrage in PowerShell sendet und die Antwort erhält:

$response = Invoke-RestMethod -Uri 'http://example.com/api/data' -Method 'GET'
Write-Host $response

Ausgabe könnte so aussehen:

{ "id": 123, "name": "Beispiel Daten" }

Zum Senden einer POST-Anfrage mit JSON-Inhalt:

$body = @{
    id = 123
    name = 'Neuer Eintrag'
}
$headers = @{
    "Content-Type" = "application/json"
}
$json = $body | ConvertTo-Json
$response = Invoke-RestMethod -Uri 'http://example.com/api/data' -Method 'POST' -Body $json -Headers $headers
Write-Host $response

Ausgabe:

{ "success": true, "message": "Eintrag angelegt." }

Deep Dive:

HTTP-Anfragen sind seit den frühen Tagen des Web die Grundlage der Client-Server-Kommunikation. PowerShell machte dies zunächst mit Invoke-WebRequest möglich, später dann mit Invoke-RestMethod, welches einfachere JSON- und XML-Manipulation bietet.

Alternativen zu PowerShell’s eingebauten Cmdlets schließen das .NET Framework ein, mit System.Net.Http.HttpClient für komplexere Szenarien und feingranuläre Kontrolle. Dies kann nützlich sein, wenn man Einstellungen wie Timeouts, Cookies oder fortgeschrittene Authentifizierungsmethoden benötigt.

Das Senden von HTTP-Anfragen mittels Invoke-RestMethod hat einige Besonderheiten. Zum Beispiel analysiert es die Antwort und versucht, sie in das am besten passende PowerShell-Objekt zu konvertieren, was das Arbeiten mit den Daten erleichtert. Außerdem kann man mit Parameter -Credential einfache Authentifizierung und mit -Headers spezifische Header setzen.

See Also: