Curl

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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 POST gibt die HTTP-Methode an
  • -H fügt einen Header hinzu
  • -d sendet 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

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

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

Die Antwort wird in users.json gespeichert.

Dateien herunterladen

Mit Originaldateiname speichern

-O behält den ursprünglichen Dateinamen bei.

Dateien hochladen

Multipart-Formulardaten senden

Response-Header anzeigen

Nur Header abrufen
Beispielausgabe
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 532

Header und Body gemeinsam anzeigen

Beides gemeinsam ausgeben

Redirects folgen

Automatischen Weiterleitungen folgen

Verbose-Modus

Detaillierte Debugging-Ausgabe

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)

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

Ü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
  • -v zur 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........................................;'

Links