Der Befehl curl sendet HTTP-Anfragen direkt aus dem Terminal. Damit testest du REST-APIs, debuggst Webservices oder automatisierst Datentransfers - ohne grafische Tools.

Syntax

curl [OPTIONEN] URL

Die wichtigsten Optionen für API-Anfragen:

OptionBedeutung
-XHTTP-Methode angeben (GET, POST, PUT, DELETE, PATCH)
-HHeader hinzufügen
-dDaten im Request-Body senden
-iResponse-Header anzeigen

GET-Anfragen

GET ist die Standardmethode - curl verwendet sie automatisch, wenn du keine andere angibst.

curl https://jsonplaceholder.typicode.com/posts

Mit Query-Parametern filterst du die Ergebnisse:

curl https://jsonplaceholder.typicode.com/posts?userId=1

Um auch die Response-Header zu sehen, füge -i hinzu:

curl -i https://jsonplaceholder.typicode.com/posts/1

POST-Anfragen

Mit POST erstellst du neue Ressourcen auf dem Server. Die Option -d übergibt die Daten:

curl -X POST -d "userId=5&title=Neuer Beitrag&body=Inhalt hier" \
  https://jsonplaceholder.typicode.com/posts

Ohne expliziten Content-Type sendet curl die Daten als application/x-www-form-urlencoded. Für JSON-Daten setzt du den Header manuell:

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"userId": 5, "title": "Neuer Beitrag", "body": "Inhalt hier"}' \
  https://jsonplaceholder.typicode.com/posts

PUT-Anfragen

PUT ersetzt eine bestehende Ressource vollständig. Alle Felder müssen mitgesendet werden:

curl -X PUT \
  -H "Content-Type: application/json" \
  -d '{"userId": 5, "title": "Aktualisierter Titel", "body": "Neuer Inhalt"}' \
  https://jsonplaceholder.typicode.com/posts/5

PATCH-Anfragen

PATCH aktualisiert nur einzelne Felder einer Ressource:

curl -X PATCH \
  -H "Content-Type: application/json" \
  -d '{"title": "Nur der Titel wird geändert"}' \
  https://jsonplaceholder.typicode.com/posts/5

Der Unterschied zu PUT: Bei PATCH bleiben nicht mitgesendete Felder unverändert.

DELETE-Anfragen

DELETE entfernt eine Ressource vom Server:

curl -X DELETE https://jsonplaceholder.typicode.com/posts/5

Die meisten APIs liefern bei erfolgreicher Löschung einen leeren Response-Body oder eine Bestätigung.

Authentifizierung

Viele APIs verlangen einen API-Key oder Token. Den sendest du typischerweise im Authorization-Header:

curl -H "Authorization: Bearer DEIN_TOKEN" \
  https://api.beispiel.de/daten

Für Basic Authentication gibt es die Kurzform mit -u:

curl -u benutzername:passwort https://api.beispiel.de/daten

Ohne gültigen Token antwortet der Server mit Status 401 (Unauthorized) oder 403 (Forbidden).

Debugging

Mit -v (verbose) siehst du den kompletten HTTP-Austausch - Request-Header, Response-Header und Body:

curl -v https://jsonplaceholder.typicode.com/posts/1

Das hilft beim Debuggen, wenn Anfragen fehlschlagen oder unerwartete Ergebnisse liefern.

Zusammenfassung

curl deckt alle HTTP-Methoden ab, die du für REST-APIs brauchst. Mit -X wählst du die Methode, mit -H setzt du Header und mit -d sendest du Daten. In Kombination mit -v debuggst du Probleme schnell direkt im Terminal.