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:
| Option | Bedeutung |
|---|---|
-X | HTTP-Methode angeben (GET, POST, PUT, DELETE, PATCH) |
-H | Header hinzufügen |
-d | Daten im Request-Body senden |
-i | Response-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.