curl - HTTP Client und Datentransfer¶
Umfassende Curl-Befehle für HTTP-Anfragen, API-Tests und Datenübertragung auf allen Plattformen.
Grundlegende HTTP Anfragen¶
GET Anträge¶
Command | Description |
---|---|
curl https://api.example.com |
Basic GET request |
curl -v https://api.example.com |
Verbose output with headers |
curl -i https://api.example.com |
Include response headers |
curl -I https://api.example.com |
HEAD request only |
curl -L https://example.com |
Follow redirects |
POST Anträge¶
Command | Description |
---|---|
curl -X POST https://api.example.com |
Basic POST request |
curl -d "data" https://api.example.com |
POST with data |
curl -d @file.json https://api.example.com |
POST data from file |
curl -F "file=@upload.txt" https://api.example.com |
File upload |
Andere HTTP Methoden¶
Command | Description |
---|---|
curl -X PUT -d "data" https://api.example.com |
PUT request |
curl -X DELETE https://api.example.com/item/1 |
DELETE request |
curl -X PATCH -d "data" https://api.example.com |
PATCH request |
Kopfzeilen und Authentication¶
Benutzerdefinierte Kopfzeilen¶
Command | Description |
---|---|
curl -H "Content-Type: application/json" url |
Set content type |
curl -H "Authorization: Bearer token" url |
Bearer token auth |
curl -H "User-Agent: MyApp/1.0" url |
Custom user agent |
curl -H "Accept: application/xml" url |
Accept header |
Authentifizierungsmethoden¶
Command | Description |
---|---|
curl -u username:password url |
Basic authentication |
curl -u username url |
Prompt for password |
curl --oauth2-bearer token url |
OAuth2 bearer token |
curl --digest -u user:pass url |
Digest authentication |
API Schlüsselauthentifizierung¶
```bash
API key in header¶
curl -H "X-API-Key: your-api-key" https://api.example.com
API key in query parameter¶
curl "https://api.example.com?api_key=your-api-key"
Multiple headers¶
curl -H "Authorization: Bearer token" \ -H "Content-Type: application/json" \ https://api.example.com ```_
Datenformate¶
JSON Daten¶
```bash
POST JSON data¶
curl -X POST \ -H "Content-Type: application/json" \ -d '\\{"name":"John","age":30\\}' \ https://api.example.com/users
JSON from file¶
curl -X POST \ -H "Content-Type: application/json" \ -d @data.json \ https://api.example.com/users ```_
Formular-Daten¶
```bash
URL-encoded form data¶
curl -d "name=John&age=30" https://api.example.com/users
Multipart form data¶
curl -F "name=John" -F "age=30" https://api.example.com/users
File upload with form data¶
curl -F "file=@document.pdf" \ -F "description=Important document" \ https://api.example.com/upload ```_
XML Daten¶
```bash
POST XML data¶
curl -X POST \
-H "Content-Type: application/xml" \
-d '
Dateioperationen¶
Dateien herunterladen¶
Command | Description |
---|---|
curl -O https://example.com/file.zip |
Download with original name |
curl -o myfile.zip https://example.com/file.zip |
Download with custom name |
curl -C - -O https://example.com/file.zip |
Resume interrupted download |
curl --limit-rate 100k -O url |
Limit download speed |
Dateien hochladen¶
Command | Description |
---|---|
curl -T file.txt ftp://server/path/ |
Upload via FTP |
curl -F "file=@upload.txt" url |
HTTP file upload |
curl --upload-file file.txt url |
PUT file upload |
Mehrere Dateien¶
```bash
Download multiple files¶
curl -O https://example.com/file1.zip -O https://example.com/file2.zip
Upload multiple files¶
curl -F "file1=@doc1.pdf" -F "file2=@doc2.pdf" https://api.example.com/upload ```_
Erweiterte Optionen¶
Timeouts und Retries¶
Command | Description |
---|---|
curl --connect-timeout 10 url |
Connection timeout (seconds) |
curl --max-time 30 url |
Maximum total time |
curl --retry 3 url |
Retry on failure |
curl --retry-delay 5 url |
Delay between retries |
SSL/TLS Optionen¶
Command | Description |
---|---|
curl -k url |
Ignore SSL certificate errors |
curl --cacert ca.pem url |
Use custom CA certificate |
curl --cert client.pem url |
Use client certificate |
curl --tlsv1.2 url |
Force TLS version |
Proxy und Netzwerk¶
Command | Description |
---|---|
curl --proxy proxy.example.com:8080 url |
Use HTTP proxy |
curl --socks5 proxy.example.com:1080 url |
Use SOCKS5 proxy |
curl --interface eth0 url |
Use specific network interface |
curl --dns-servers 8.8.8.8 url |
Use custom DNS servers |
Ausgabe und Formatierung¶
Ausgangssteuerung¶
Command | Description |
---|---|
curl -s url |
Silent mode (no progress) |
curl -S url |
Show errors even in silent mode |
curl -o /dev/null url |
Discard output |
curl -w "%\\{http_code\\}" url |
Show only HTTP status code |
Antwort¶
```bash
Get detailed timing information¶
curl -w "@curl-format.txt" https://example.com
curl-format.txt content:¶
time_namelookup: %\\{time_namelookup\\}\n¶
time_connect: %\\{time_connect\\}\n¶
time_appconnect: %\\{time_appconnect\\}\n¶
time_pretransfer: %\\{time_pretransfer\\}\n¶
time_redirect: %\\{time_redirect\\}\n¶
time_starttransfer: %\\{time_starttransfer\\}\n¶
----------\n¶
time_total: %\\{time_total\\}\n¶
```_
JSON Verarbeitung¶
```bash
Pretty print JSON with jq¶
curl -s https://api.example.com/users|jq '.'
Extract specific fields¶
curl -s https://api.example.com/users|jq '.[]|.name'
Filter results¶
curl -s https://api.example.com/users|jq '.[]|select(.age > 25)' ```_
Prüfung und Debugging¶
API Testing¶
```bash
Test REST API endpoints¶
curl -X GET https://api.example.com/users curl -X POST -d '\\{"name":"John"\\}' https://api.example.com/users curl -X PUT -d '\\{"name":"Jane"\\}' https://api.example.com/users/1 curl -X DELETE https://api.example.com/users/1
Test with different content types¶
curl -H "Accept: application/json" https://api.example.com/users curl -H "Accept: application/xml" https://api.example.com/users ```_
Leistungsprüfung¶
```bash
Measure response time¶
curl -w "Total time: %\\{time_total\\}s\n" -o /dev/null -s https://example.com
Test multiple requests¶
for i in \\{1..10\\}; do curl -w "%\\{time_total\\}\n" -o /dev/null -s https://example.com done ```_
Fehlerbehebung¶
```bash
Check HTTP status codes¶
http_code=$(curl -s -o /dev/null -w "%\\{http_code\\}" https://example.com) if [ $http_code -eq 200 ]; then echo "Success" else echo "Error: HTTP $http_code" fi ```_
Konfiguration und Skripte¶
Datei konfigurieren¶
```bash
~/.curlrc configuration file¶
user-agent = "MyApp/1.0" connect-timeout = 10 max-time = 30 show-error silent ```_
Bash Schrift¶
```bash
!/bin/bash¶
API testing script¶
BASE_URL="https://api.example.com" API_KEY="your-api-key"
Function to make authenticated requests¶
api_request() \\{ local method=\(1 local endpoint=\)2 local data=$3
curl -X "$method" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
$\\\\{data:+-d "$data"\\\\} \
"$BASE_URL$endpoint"
\\}
Usage examples¶
api_request GET "/users" api_request POST "/users" '\\{"name":"John","email":"john@example.com"\\}' ```_
Sicherheit Best Practices¶
Sichere Authentifizierung¶
```bash
Use environment variables for sensitive data¶
export API_TOKEN="your-secret-token" curl -H "Authorization: Bearer $API_TOKEN" https://api.example.com
Read credentials from file¶
curl -K credentials.txt https://api.example.com
credentials.txt:¶
header = "Authorization: Bearer your-token"¶
```_
Zertifikatskontrolle¶
```bash
Always verify SSL certificates in production¶
curl --cacert /path/to/ca-bundle.crt https://api.example.com
For development only (not recommended for production)¶
curl -k https://self-signed.example.com ```_
Allgemeine Anwendungsfälle¶
Web Scraping¶
```bash
Download webpage¶
curl -L https://example.com > page.html
Follow redirects and save cookies¶
curl -L -c cookies.txt -b cookies.txt https://example.com
Set user agent to avoid blocking¶
curl -H "User-Agent: Mozilla/5.0 (compatible; bot)" https://example.com ```_
API Integration¶
```bash
GitHub API example¶
curl -H "Authorization: token your-github-token" \ https://api.github.com/user/repos
Weather API example¶
curl "https://api.openweathermap.org/data/2.5/weather?q=London&appid=your-api-key"
Slack webhook example¶
curl -X POST \ -H "Content-Type: application/json" \ -d '\\{"text":"Hello from curl!"\\}' \ https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK ```_
Dateiübertragung¶
```bash
Upload to cloud storage¶
curl -X PUT \ -H "Authorization: Bearer token" \ --upload-file document.pdf \ https://api.storage.com/files/document.pdf
Download with progress bar¶
curl --progress-bar -O https://example.com/largefile.zip ```_
Fehlerbehebung¶
Gemeinsame Themen¶
Problem | Solution |
---|---|
SSL certificate errors | Use -k for testing, fix certificates for production |
Connection timeout | Increase --connect-timeout value |
Slow downloads | Use --limit-rate to control bandwidth |
Authentication failures | Check credentials and authentication method |
Debugging Commands¶
```bash
Verbose output for debugging¶
curl -v https://example.com
Trace all network activity¶
curl --trace trace.txt https://example.com
Show only headers¶
curl -I https://example.com
Test connectivity¶
curl -I --connect-timeout 5 https://example.com ```_