Curl: Unterschied zwischen den Versionen
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| + | |||
| + | == Einleitung == | ||
'''C'''url '''U'''RL '''R'''equest '''L'''ibrary | '''C'''url '''U'''RL '''R'''equest '''L'''ibrary | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Wer mit APIs arbeitet, kennt Befehle, die mit <code>curl</code> beginnen. Während Tools wie Postman oder Insomnia grafische Oberflächen bieten, bleibt cURL eines der mächtigsten und am weitesten verbreiteten Werkzeuge für API-Tests. | Wer mit APIs arbeitet, kennt Befehle, die mit <code>curl</code> beginnen. Während Tools wie Postman oder Insomnia grafische Oberflächen bieten, bleibt cURL eines der mächtigsten und am weitesten verbreiteten Werkzeuge für API-Tests. | ||
| Zeile 34: | Zeile 25: | ||
Für API-Tests werden hauptsächlich '''HTTP''' und '''HTTPS''' benötigt. | Für API-Tests werden hauptsächlich '''HTTP''' und '''HTTPS''' benötigt. | ||
| + | |||
| + | == Installation == | ||
| + | |||
| + | ;Debian-basierte Systeme | ||
| + | *apt install curl | ||
| + | ;Arch-basierte Systeme | ||
| + | *pacman -S curl | ||
| + | ;Red-Hat-basierte Systeme | ||
| + | *dnf install curl | ||
| + | |||
| + | |||
== Warum Entwickler cURL schätzen == | == Warum Entwickler cURL schätzen == | ||
Aktuelle Version vom 25. Juli 2026, 16:36 Uhr
Einleitung
Curl URL Request Library
Wer mit APIs arbeitet, kennt Befehle, die mit curl beginnen. Während Tools wie Postman oder Insomnia grafische Oberflächen bieten, bleibt cURL eines der mächtigsten und am weitesten verbreiteten Werkzeuge für API-Tests.
Viele API-Dokumentationen zeigen cURL-Beispiele noch vor jeder anderen Sprache – weil es einfach, universell und auf fast jedem Betriebssystem verfügbar ist.
Was ist cURL?
cURL (Client URL) ist ein Kommandozeilen-Tool zur Datenübertragung zwischen Client und Server über URLs. Es unterstützt zahlreiche Protokolle, u. a.:
- HTTP
- HTTPS
- FTP
- SFTP
- SMTP
- IMAP
- LDAP
- SCP
- SMB
- MQTT
Für API-Tests werden hauptsächlich HTTP und HTTPS benötigt.
Installation
- Debian-basierte Systeme
- apt install curl
- Arch-basierte Systeme
- pacman -S curl
- Red-Hat-basierte Systeme
- dnf install curl
Warum Entwickler cURL schätzen
Im Gegensatz zu grafischen API-Clients ist cURL:
- Leichtgewichtig
- Schnell
- Plattformübergreifend
- Skriptierbar
- Unter Linux und macOS standardmäßig vorhanden
- In moderne Windows-Versionen integriert
Typische Einsatzzwecke:
- Testen von REST-APIs
- Debuggen von Serverantworten
- Automatisieren von API-Requests
- Prüfen von Endpunkten
- Herunterladen von Dateien
- Hochladen von Dateien
- Authentifizierung von Requests
Grundlegende Syntax
- Aufbau
- curl [optionen] URL
- Beispiel
Dieser Befehl sendet einen einfachen GET-Request.
GET-Request
- Daten abrufen
Es sind keine zusätzlichen Flags nötig, da GET die Standard-HTTP-Methode ist.
POST-Request
- Neue Ressource erstellen
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name":"John","age":25}'
Dabei gilt:
-X POSTgibt die HTTP-Methode an-Hfügt einen Header hinzu-dsendet die Request-Daten (Body)
JSON-Daten senden
- Login-Beispiel mit JSON-Body
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
-d '{
"email":"john@example.com",
"password":"secret"
}'
PUT-Request
- Ressource vollständig aktualisieren
curl -X PUT https://api.example.com/users/5 \
-H "Content-Type: application/json" \
-d '{"name":"Jane"}'
PATCH-Request
- Ressource teilweise aktualisieren
curl -X PATCH https://api.example.com/users/5 \
-H "Content-Type: application/json" \
-d '{"age":30}'
DELETE-Request
- Ressource entfernen
- curl -X DELETE https://api.example.com/users/5
Header hinzufügen
- Zusätzliche Informationen an den Server übermitteln
curl \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json" \
https://api.example.com/profile
Gebräuchliche Header:
- Authorization
- Content-Type
- Accept
- User-Agent
Query-Parameter verwenden
- Parameter an die URL anhängen
Authentifizierung
Basic Authentication
- Benutzername und Passwort übergeben
- curl -u username:password https://api.example.com
Dies entspricht dem Senden von:
Authorization: Basic ...
Bearer-Token-Authentifizierung
- Token im Authorization-Header senden
curl \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
https://api.example.com/profile
Diese Methode wird häufig bei OAuth 2.0 und JWT-basierten APIs verwendet.
Antwort in Datei speichern
- Response in Datei umleiten
- curl -o users.json https://api.example.com/users
Die Antwort wird in users.json gespeichert.
Dateien herunterladen
- Mit Originaldateiname speichern
- curl -O https://example.com/file.zip
-O behält den ursprünglichen Dateinamen bei.
Dateien hochladen
- Multipart-Formulardaten senden
- curl -F "file=@image.png" https://api.example.com/upload
Response-Header anzeigen
- Nur Header abrufen
- curl -I https://example.com
- Beispielausgabe
HTTP/1.1 200 OK Content-Type: application/json Content-Length: 532
Header und Body gemeinsam anzeigen
- Beides gemeinsam ausgeben
- curl -i https://api.example.com/users
Redirects folgen
- Automatischen Weiterleitungen folgen
- curl -L https://example.com
Verbose-Modus
- Detaillierte Debugging-Ausgabe
- curl -v https://api.example.com/users
Angezeigt werden:
- Request-Header
- Response-Header
- SSL-Aushandlung (SSL-Negotiation)
- Verbindungsinformationen
- Redirects
Dies hilft bei der Diagnose von API- und Netzwerkproblemen.
SSL-Zertifikatsfehler ignorieren
- Zertifikatsprüfung überspringen (nur lokale Entwicklung)
- curl -k https://localhost:5000
Hinweis: -k deaktiviert die Zertifikatsprüfung und sollte in Produktivumgebungen vermieden werden.
Cookies senden und speichern
- Cookies aus Datei senden
curl \
-b cookies.txt \
https://example.com
- Cookies in Datei speichern
- curl -c cookies.txt https://example.com
Übersicht gebräuchlicher cURL-Optionen
| Option | Zweck |
|---|---|
-X |
HTTP-Methode angeben |
-H |
Request-Header hinzufügen |
-d |
Request-Body senden |
-o |
Ausgabe speichern |
-O |
Mit Originaldateiname speichern |
-I |
Nur Header abrufen |
-i |
Response-Header einschließen |
-v |
Ausführliche Ausgabe (verbose) |
-L |
Redirects folgen |
-u |
Basic Authentication |
-F |
Dateien hochladen |
-k |
SSL-Prüfung ignorieren |
-A |
User-Agent setzen |
-e |
Referer setzen |
--compressed |
Komprimierte Antworten anfordern |
Beispiel: Öffentliche API testen
- Beispielaufruf
- Beispielantwort
{
"userId": 1,
"id": 1,
"title": "...",
"body": "..."
}
Mehrere Optionen kombinieren
- Vollständiger POST-Request mit Auth und Body
curl \
-X POST \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Hello"}' \
https://api.example.com/posts
cURL vs. Postman
| Merkmal | cURL | Postman |
|---|---|---|
| Kommandozeile | Vorlage:Ja | Vorlage:Nein |
| GUI | Vorlage:Nein | Vorlage:Ja |
| Automatisierung | Ausgezeichnet | Gut |
| Leichtgewichtig | Vorlage:Ja | Vorlage:Nein |
| Skriptfähigkeit | Ausgezeichnet | Gut |
| Lernkurve | Moderat | Einfach |
| In vielen Systemen vorinstalliert | Vorlage:Ja | Vorlage:Nein |
Viele Entwickler nutzen beide Werkzeuge: Postman zum Erkunden von APIs, cURL für Skripting, Automatisierung und schnelle Tests im Terminal.
Best Practices
- HTTPS wann immer möglich verwenden
- API-Keys in Umgebungsvariablen statt fest im Code hinterlegen
-vzur Fehlersuche bei Requests nutzen- HTTP-Statuscodes prüfen, nicht nur den Response-Body
- SSL-Prüfung außerhalb der lokalen Entwicklung nicht deaktivieren
- Wiederverwendbare cURL-Befehle in Shell-Skripten für Automatisierung ablegen
Fazit
cURL ist mehr als ein einfaches Download-Werkzeug – es ist ein unverzichtbares Utility für Entwickler, die mit APIs arbeiten. Ob GET-Request, JSON-POST, Datei-Upload oder Debugging von Authentifizierungsproblemen: cURL ermöglicht eine schnelle, zuverlässige Interaktion mit Webservices direkt von der Kommandozeile aus.
Da es auf praktisch jeder Entwicklungsumgebung verfügbar ist und sich problemlos in Skripte und CI/CD-Pipelines integrieren lässt, bleibt cURL eines der wertvollsten Werkzeuge im Werkzeugkasten eines Entwicklers.
nützliche Webseiten
öffentliche IP-Adresse herausfinden
- curl -6 ifconfig.co
*xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx*
- curl -4 ipinfo.io
{
"ip": "xxx.xxx.xxx.xxx.xxx",
"city": "Frankfurt am Main",
"region": "Hesse",
"country": "DE",
"loc": "Breitengrad, Längengrad",
"org": "Organisation",
"postal": "60306",
"timezone": "Europe/Berlin",
"readme": "https://ipinfo.io/missingauth"
}
Cheat Sheet für Kommandozeilenbefehle
- curl cheat.sh/find
find . -iname '*.jpg' # Find directories. find . -type d # Find files. Specifically files; not directories, links, FIFOs, etc. find . -type f # Find files set to the provided octal mode (permissions). find . -type f -perm 777 ...
- curl cheat.sh/nmap
# Single target scan: nmap [target] # Scan from a list of targets: nmap -iL [list.txt] # Scan port for all available A records # (useful when multiple A records are returned by the DNS server) nmap --script resolveall --script-args newtargets,resolveall.hosts=[target] -p [port] # iPv6: nmap -6 [target] # OS detection: nmap -O --osscan_guess [target] # Save output to text file: nmap -oN [output.txt] [target] ...
- curl cheat.sh/tcpdump
# Intercepts all packets on eth0 tcpdump -i eth0 # Intercepts all packets from/to 173.194.40.120 tcpdump host 173.194.40.120 # Intercepts all packets on all interfaces from / to 173.194.40.120 port 80 # -nn => Disables name resolution for IP addresses and port numbers. tcpdump -nn -i any host 173.194.40.120 and port 80
Das Wetter
- curl wttr.in/Zweibrücken
Weather report: Zweibrücken
\ / Sunny
.-. +2(-2) °C
― ( ) ― ↓ 4 km/h
`-’ 10 km
/ \ 0.0 mm
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Fri 03 Mar ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ \ / Sunny │ \ / Sunny │ \ / Sunny │ \ / Clear │
│ .-. +1(-2) °C │ .-. +7(5) °C │ .-. +6(5) °C │ .-. +2(0) °C │
│ ― ( ) ― ↙ 9-15 km/h │ ― ( ) ― ↙ 13-14 km/h │ ― ( ) ― ↙ 9-13 km/h │ ― ( ) ― ↓ 7-15 km/h │
│ `-’ 10 km │ `-’ 10 km │ `-’ 10 km │ `-’ 10 km │
│ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Sat 04 Mar ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ \ / Sunny │ \ / Sunny │ \ / Partly cloudy │ Cloudy │
│ .-. +2(0) °C │ .-. +6(4) °C │ _ /"".-. +4(1) °C │ .--. +3(0) °C │
│ ― ( ) ― ↓ 5-8 km/h │ ― ( ) ― ↓ 12-15 km/h │ \_( ). ↓ 11-17 km/h │ .-( ). ↓ 9-15 km/h │
│ `-’ 10 km │ `-’ 10 km │ /(___(__) 10 km │ (___.__)__) 10 km │
│ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │ 0.0 mm | 0% │ 0.0 mm | 0% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Sun 05 Mar ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ Overcast │ Overcast │ Overcast │ Cloudy │
│ .--. +2(0) °C │ .--. +3(2) °C │ .--. +4(1) °C │ .--. +1(0) °C │
│ .-( ). ↓ 5-8 km/h │ .-( ). ↘ 5-7 km/h │ .-( ). → 8-12 km/h │ .-( ). → 4-7 km/h │
│ (___.__)__) 10 km │ (___.__)__) 10 km │ (___.__)__) 10 km │ (___.__)__) 10 km │
│ 0.0 mm | 0% │ 0.0 mm | 0% │ 0.0 mm | 0% │ 0.0 mm | 0% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
Location: Zweibrücken, Rheinland-Pfalz, 66482, Deutschland [49.248655,7.3641981]
Follow @igor_chubin for wttr.in updates
Dad Jokes
- curl -L icanhazdadjoke.com
Did you hear about the cheese who saved the world? It was Legend-dairy!
animierter Papagei
- curl parrot.live
.ckx;'........':c.
.,:c:::::oxxocoo::::,',.
.odc'..:lkkoolllllo;..;d,
;c..:o:..;:..',;'.......;.
,c..:0Xx::o:.,cllc:,'::,.,c.
;c;lkXKXXXXl.;lllll;lKXOo;':c.
,dc.oXXXXXXXXl.,lllll;lXXXXx,c0:
;Oc.oXXXXXXXXo.':ll:;'oXXXXO;,l'
'l;;kXXXXXXXXd'.'::'..dXXXXO;,l'
'l;:0XXXXXXXX0x:...,:o0XXXXx,:x,
'l;;kXXXXXXXXXKkol;oXXXXXXXO;oNc
,c'..ckk0XXXXXXXXXX00XXXXXXX0:;o:.
.':;..:do::ooookXXXXXXXXXXXXXXXo..c;
.',',:co0XX0kkkxxOXXXXXXXXXXXXXXXOc..;l.
.:;'..oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXko;';:.
.ldc..:oOXKXXXXXXKXXKXXXXXXXXXXXXXXXXXXXo..oc
:0o...:dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxo,.:,
cNo........................................;'