Aller au contenu

curl - Client HTTP et Transfert de Données

Commandes curl complètes pour les requêtes HTTP, les tests d’API et le transfert de données sur toutes les plateformes.

Requêtes HTTP de Base

Requêtes GET

CommandeDescription
curl https://api.example.comRequête GET de base
curl -v https://api.example.comSortie verbeuse avec en-têtes
curl -i https://api.example.comInclure les en-têtes de réponse
curl -I https://api.example.comRequête HEAD uniquement
curl -L https://example.comSuivre les redirections

Requêtes POST

CommandeDescription
curl -X POST https://api.example.comRequête POST de base
curl -d "data" https://api.example.comPOST avec des données
curl -d @file.json https://api.example.comDonnées POST à partir d’un fichier
curl -F "file=@upload.txt" https://api.example.comTéléchargement de fichier

Autres Méthodes HTTP

CommandeDescription
curl -X PUT -d "data" https://api.example.comRequête PUT
curl -X DELETE https://api.example.com/item/1Requête DELETE
curl -X PATCH -d "data" https://api.example.comRequête PATCH

En-têtes et Authentification

En-têtes Personnalisés

CommandeDescription
curl -H "Content-Type: application/json" urlDéfinir le type de contenu
curl -H "Authorization: Bearer token" urlAuthentification par token Bearer
curl -H "User-Agent: MyApp/1.0" urlAgent utilisateur personnalisé
curl -H "Accept: application/xml" urlEn-tête Accept

Méthodes d’Authentification

CommandeDescription
curl -u username:password urlAuthentification de base
curl -u username urlDemander un mot de passe
curl --oauth2-bearer token urlJeton porteur OAuth2
curl --digest -u user:pass urlAuthentification Digest

Authentification par Clé API

# 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

Formats de Données

Données JSON

# 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

Données de Formulaire

# 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

Données XML

# POST XML data
curl -X POST \
     -H "Content-Type: application/xml" \
     -d '<user><name>John</name><age>30</age></user>' \
     https://api.example.com/users

Opérations sur Fichiers

Télécharger des Fichiers

CommandeDescription
curl -O https://example.com/file.zipTélécharger avec le nom original
curl -o myfile.zip https://example.com/file.zipTélécharger avec un nom personnalisé
curl -C - -O https://example.com/file.zipReprendre le téléchargement interrompu
curl --limit-rate 100k -O urlLimiter la vitesse de téléchargement

Téléverser des Fichiers

CommandeDescription
curl -T file.txt ftp://server/path/Télécharger via FTP
curl -F "file=@upload.txt" urlTéléchargement de fichier HTTP
curl --upload-file file.txt urlPUT téléchargement de fichier

Fichiers Multiples

# 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

Options Avancées

Délais et Tentatives

CommandeDescription
curl --connect-timeout 10 urlDélai de connexion (secondes)
curl --max-time 30 urlTemps total maximum
curl --retry 3 urlRéessayer en cas d’échec
curl --retry-delay 5 urlDélai entre les tentatives

Options SSL/TLS

CommandeDescription
curl -k urlIgnorer les erreurs de certificat SSL
curl --cacert ca.pem urlUtiliser un certificat CA personnalisé
curl --cert client.pem urlUtiliser le certificat client
curl --tlsv1.2 urlForcer la version TLS

Proxy et Réseau

CommandeDescription
curl --proxy proxy.example.com:8080 urlUtiliser un proxy HTTP
curl --socks5 proxy.example.com:1080 urlUtiliser un proxy SOCKS5
curl --interface eth0 urlUtiliser une interface réseau spécifique
curl --dns-servers 8.8.8.8 urlUtiliser des serveurs DNS personnalisés

Sortie et Formatage

Contrôle de Sortie

CommandeDescription
curl -s urlMode silencieux (aucune progression)
curl -S urlAfficher les erreurs même en mode silencieux
curl -o /dev/null urlIgnorer la sortie
curl -w "%\\{http_code\\}" urlAfficher uniquement le code de statut HTTP

Informations de Réponse

# 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

Traitement JSON

# 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)'

Tests et Débogage

Tests d’API

Would you like me to continue with the remaining sections or provide translations for the specific sections you mentioned?```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

```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
```### Gestion des Erreurs
```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
```## Configuration et Scripts
```bash
# ~/.curlrc configuration file
user-agent = "MyApp/1.0"
connect-timeout = 10
max-time = 30
show-error
silent
```### Fichier de Configuration
```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"\\\\}'
```### Scripting Bash
```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"
```## Meilleures Pratiques de Sécurité
```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
```### Authentification Sécurisée
```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
```### Vérification de Certificat
```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
```## Cas d'Utilisation Courants
```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
```### Scraping Web

| Problème | 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 | Vérifier les identifiants et la méthode d'authentification |### Intégration d'API
```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