Vous écrivez un script Bash qui doit scraper une API, vérifier un prix, ou tester une page depuis plusieurs géolocalisations — et vous avez besoin de utiliser un proxy avec cURL sans dépendre d'un wrapper Python ou Node.js. Bonne nouvelle : cURL supporte nativement les proxies HTTP, HTTPS et SOCKS5, avec authentification intégrée. Ce guide vous montre comment configurer le gateway ProxyHat gate.proxyhat.com:8080 en ligne de commande, de l'appel le plus simple à la rotation d'IP en production.
Utiliser un proxy avec cURL : les fondamentaux
Le proxy cURL le plus basique se résume à un seul flag : -x ou --proxy. Vous lui passez une URL complète incluant le protocole, l'hôte et le port. Pour le gateway ProxyHat, cela donne :
# Proxy HTTP basique via ProxyHat
curl -x http://gate.proxyhat.com:8080 https://httpbin.org/ip
Mais sans authentification, vous n'irez pas loin. ProxyHat attend des identifiants dans l'URL ou via --proxy-user :
# Authentification inline dans l'URL
curl -x http://USERNAME:PASSWORD@gate.proxyhat.com:8080 https://httpbin.org/ip
# Authentification via --proxy-user
curl -x http://gate.proxyhat.com:8080 --proxy-user 'USERNAME:PASSWORD' https://httpbin.org/ip
Le résultat devrait afficher l'IP du proxy sortant, pas votre IP réelle. Si vous voyez votre IP, le proxy n'est pas actif — vérifiez vos identifiants et la syntaxe.
SOCKS5 et la résolution DNS distante
Le flag --socks5 existe, mais il laisse cURL résoudre le DNS localement avant de se connecter au proxy. Cela peut fuiter votre vraie IP via les requêtes DNS. Préférez --socks5-hostname ou le schéma socks5h:// qui délègue la résolution DNS au proxy :
# SOCKS5 avec résolution DNS locale (risque de fuite)
curl --socks5 gate.proxyhat.com:1080 https://httpbin.org/ip
# SOCKS5 avec résolution DNS distante (recommandé)
curl --socks5-hostname gate.proxyhat.com:1080 https://httpbin.org/ip
# Équivalent avec schéma socks5h://
curl -x socks5h://USERNAME:PASSWORD@gate.proxyhat.com:1080 https://httpbin.org/ip
Pourquoi socks5h:// plutôt que socks5:// ? Le « h » indique à cURL de ne pas résoudre le nom d'hôte localement. Selon la documentation officielle de cURL, le suffixe -hostname force la résolution DNS côté proxy, ce qui empêche votre fournisseur d'accès de voir quel domaine vous ciblez. C'est un détail critique pour le web scraping et les recherches sensibles.
Authentification, geo-targeting et sessions sticky
ProxyHat encode les paramètres de géolocalisation et de session directement dans le nom d'utilisateur. Pas besoin d'en-têtes supplémentaires — tout passe par l'identifiant. Voici les patterns les plus courants :
# Geo-targeting par pays
curl -x http://user-country-US:pass@gate.proxyhat.com:8080 https://httpbin.org/ip
# Geo-targeting par pays + ville
curl -x http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080 https://httpbin.org/ip
# Session sticky (IP fixe pendant la session)
curl -x http://user-session-abc123:pass@gate.proxyhat.com:8080 https://httpbin.org/ip
# Combinaison : pays + ville + session
curl -x http://user-country-US-city-newyork-session-abc123:pass@gate.proxyhat.com:8080 https://httpbin.org/ip
Le flag --proxy-user est particulièrement utile quand votre mot de passe contient des caractères spéciaux qui pourraient casser l'URL. Encadrez toujours la chaîne entre guillemets simples :
# Échappement sécurisé avec --proxy-user
curl -x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-FR-city-paris-session-mySess1!' \
https://httpbin.org/ip
Les sessions sticky sont essentielles quand un site maintient un état de session côté serveur (panier, login multi-étapes). Sans session fixe, chaque requête arrive depuis une IP différente et le site vous déconnecte.
Variables d'environnement et fichier de configuration
Écrire -x http://...:8080 à chaque commande devient vite fastidieux. cURL lit automatiquement plusieurs variables d'environnement, ce qui permet de définir le proxy une fois pour toute la session shell :
# Définir le proxy pour toute la session
export HTTP_PROXY="http://user-country-US:pass@gate.proxyhat.com:8080"
export HTTPS_PROXY="http://user-country-US:pass@gate.proxyhat.com:8080"
export ALL_PROXY="socks5h://user-country-US:pass@gate.proxyhat.com:1080"
# Exclure certains domaines du proxy
export NO_PROXY="localhost,127.0.0.1,.internal.company.com"
# Désormais, cURL utilise le proxy automatiquement
curl https://httpbin.org/ip
curl https://api.exemple.com/data
La variable HTTPS_PROXY est particulièrement importante : sans elle, cURL enverra les requêtes HTTPS en direct, contournant le proxy. ALL_PROXY sert de fallback pour les protocoles non-HTTP (SOCKS5, FTP). Pour plus de détails sur ces variables, consultez la documentation everything.curl.dev sur les proxies.
Fichier ~/.curlrc réutilisable
Pour une configuration permanente, créez un fichier ~/.curlrc que cURL lit automatiquement à chaque exécution :
# ~/.curlrc
proxy = "http://user-country-US:pass@gate.proxyhat.com:8080"
proxy-user = "user-country-US:pass"
compressed
user-agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
connect-timeout = 15
max-time = 60
retry = 3
retry-all-errors
Vous pouvez aussi utiliser un fichier de configuration dédié avec -K (ou --config), utile pour séparer différents profils de proxy :
# profil-eu.txt
proxy = "http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080"
compressed
user-agent = "Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0"
curl -K profil-eu.txt https://httpbin.org/ip
Cette approche est idéale pour les équipes DevOps qui gèrent plusieurs profils : un pour le scraping US, un pour l'EU, un pour les tests QA internes.
Proxies résidentiels vs datacenter : pourquoi ça compte avec cURL
Les proxies datacenter sont rapides et bon marché, mais leurs plages IP sont publiquement identifiées comme appartenant à des hébergeurs (AWS, OVH, DigitalOcean). Les sites anti-bot comme Cloudflare ou Datadome les bloquent souvent par défaut. Les proxies résidentiels utilisent des adresses IP attribuées par de vrais FAI, ce qui les rend indiscernables du trafic organique.
| Critère | Proxy datacenter | Proxy résidentiel |
|---|---|---|
| Vitesse moyenne | 50–100 ms | 200–800 ms |
| Taux de succès (cibles difficiles) | 30–50% | 90–98% |
| Détection anti-bot | Élevée | Faible |
| Coût par GB | $0.50–$2 | $3–$15 |
| Cas d'usage idéal | API publiques, tests internes | Scraping SERP, e-commerce, social |
Pour du scraping SERP ou du suivi de prix e-commerce, le surcoût du résidentiel se justifie par un taux de succès qui peut passer de 40% à 95%. Sur 10 000 requêtes, cela fait la différence entre 4 000 et 9 500 pages récupérées — un ROI immédiat.
Rotation d'IP en Bash avec retry et diagnostics
Voici un exemple concret de rotation d'IP à travers une liste d'URLs, avec retry automatique et diagnostics de timing. Chaque requête utilise une session sticky différente, ce qui force une nouvelle IP à chaque itération :
#!/usr/bin/env bash
set -euo pipefail
# Liste d'URLs à scraper
URLS=(
"https://httpbin.org/ip"
"https://httpbin.org/headers"
"https://httpbin.org/user-agent"
"https://httpbin.org/delay/2"
)
PROXY_HOST="gate.proxyhat.com"
PROXY_PORT="8080"
PROXY_USER_BASE="user-country-US"
PROXY_PASS="your_password"
# Fichier de résultats
OUTPUT_FILE="results.tsv"
echo -e "url\tstatus\ttime_total\tip" > "$OUTPUT_FILE"
i=0
for url in "${URLS[@]}"; do
session_id="sess_$(date +%s)_${i}"
proxy_user="${PROXY_USER_BASE}-session-${session_id}"
result=$(curl -s -w "%{http_code} %{time_total}" \
-x "http://${proxy_user}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}" \
--retry 3 \
--retry-all-errors \
--retry-delay 2 \
--connect-timeout 15 \
--max-time 60 \
--compressed \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
"$url" 2>&1) || result="ERROR"
http_code=$(echo "$result" | tail -1 | awk '{print $1}')
time_total=$(echo "$result" | tail -1 | awk '{print $2}')
body=$(echo "$result" | head -n -1)
origin=$(echo "$body" | grep -o '"origin": "[^"]*"' | cut -d'"' -f4 || echo "N/A")
echo -e "${url}\t${http_code}\t${time_total}s\t${origin}" >> "$OUTPUT_FILE"
echo "[$i] $url -> HTTP $http_code (${time_total}s) IP: $origin"
i=$((i + 1))
sleep 1 # Rate limiting entre requêtes
done
echo "\nTerminé. Résultats dans $OUTPUT_FILE"
Le flag -w "%{http_code} %{time_total}" est un outil de diagnostic puissant : il écrit les métriques sur stderr après le corps de la réponse, sans polluer le JSON. --retry-all-errors (disponible depuis cURL 7.71.0) relance même sur les erreurs HTTP 4xx, ce qui est utile pour les 429 Too Many Requests.
Astuces de production : TLS, en-têtes et parallélisme
Forcer TLS 1.3
Les sites modernes négocient TLS 1.3 par défaut, mais cURL peut tomber sur TLS 1.2 selon la version et la configuration. Forcer 1.3 réduit la latence (handshake en 1 RTT au lieu de 2) et améliore la compatibilité avec les proxies qui inspectent le TLS :
curl --tlsv1.3 --tls-max 1.3 \
-x http://user-country-US:pass@gate.proxyhat.com:8080 \
https://httpbin.org/ip
User-Agent et en-têtes personnalisés
Le User-Agent par défaut de cURL (curl/8.x.x) est un signal immédiat pour les anti-bots. Remplacez-le systématiquement par un navigateur réaliste, et ajoutez les en-têtes Accept et Accept-Language cohérents avec votre geo-targeting :
curl -x http://user-country-FR-city-paris:pass@gate.proxyhat.com:8080 \
-H "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
-H "Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3" \
--compressed \
https://exemple.fr/page
--compressed demande à cURL d'envoyer Accept-Encoding: gzip, deflate, br et de décompresser automatiquement la réponse. Cela réduit la bande passante de 60 à 80% sur les pages HTML, un gain direct sur votre quota de trafic proxy.
Parallélisme avec xargs -P
Pour scraper une liste d'URLs en parallèle, xargs -P est plus simple et plus robuste qu'un while loop séquentiel. Voici un pattern qui lance 10 requêtes concurrentes :
# Générer une liste d'URLs avec sessions uniques
cat urls.txt | awk '{print $1, NR}' | while read url id; do
echo "-x http://user-country-US-session-sess${id}:pass@gate.proxyhat.com:8080 -s -w '%{http_code} %{time_total}\n' --retry 2 --retry-all-errors --compressed -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' $url"
done | xargs -L 1 -P 10 curl 2>/dev/null
Alternativement, cURL 7.66+ supporte --parallel nativement, ce qui évite xargs :
# Fichier de config pour --parallel
cat > parallel_urls.txt << 'EOF'
url = "https://httpbin.org/ip?n=1"
proxy = "http://user-country-US-session-s1:pass@gate.proxyhat.com:8080"
compressed
url = "https://httpbin.org/ip?n=2"
proxy = "http://user-country-US-session-s2:pass@gate.proxyhat.com:8080"
compressed
url = "https://httpbin.org/ip?n=3"
proxy = "http://user-country-US-session-s3:pass@gate.proxyhat.com:8080"
compressed
EOF
curl --parallel --parallel-immediate --parallel-max 5 -K parallel_urls.txt
Avec --parallel-max 5, vous limitez à 5 connexions simultanées — un bon point de départ pour éviter de saturer le gateway. Surveillez le taux de succès et augmentez progressivement.
ProxyHat SDK : quand cURL ne suffit plus
cURL est parfait pour les scripts shell, les tests rapides et l'automatisation simple. Mais quand vous avez besoin de rotation intelligente, de gestion de pool d'IP, de circuit breakers ou de retry exponentiel, le SDK ProxyHat enveloppe ces mêmes endpoints gate.proxyhat.com:8080 avec une couche d'abstraction. Le SDK gère automatiquement la rotation, les retries avec backoff, et les métriques de succès — tout ce que vous coderiez à la main en Bash.
Pour explorer les options de proxy résidentiel et mobile, consultez notre page de tarification et la liste des localisations disponibles. Pour des cas d'usage spécifiques, voir nos guides sur le web scraping et le suivi SERP.
Considérations légales et éthiques
Le scraping de données publiques est légal dans de nombreuses juridictions, mais les contours varient. Aux États-Unis, le Computer Fraud and Abuse Act (CFAA) criminalise l'accès non autorisé aux systèmes informatiques. La jurisprudence récente (hiQ Labs v. LinkedIn, 2022) a partiellement clarifié que scraper des données publiquement accessibles ne constitue pas une violation du CFAA, mais le paysage reste complexe. Dans l'UE, le RGPD s'applique aux données personnelles : si vous collectez des informations identifiant des individus, vous devez avoir une base légale (consentement, intérêt légitime) et respecter les droits des personnes concernées.
Bonnes pratiques minimales :
- Respecter
robots.txtet les conditions d'utilisation du site cible. - Limiter le taux de requêtes pour ne pas surcharger l'infrastructure cible (1–5 req/s est raisonnable).
- Ne collecter que des données publiquement accessibles, sans contournement de paywall ou d'authentification.
- Préférer une API officielle quand elle existe — c'est souvent plus fiable, plus rapide et juridiquement plus sûr.
Si un site propose une API documentée avec un plan gratuit ou freemium, c'est presque toujours la meilleure option. Le proxy est un outil de dernier recours, pas un raccourci pour contourner des limitations raisonnables.
Points clés à retenir
Récapitulatif :
-x http://gate.proxyhat.com:8080pour un proxy HTTP simple ;--socks5-hostnameousocks5h://pour SOCKS5 sans fuite DNS.- Geo-targeting et sessions sticky encodés dans le nom d'utilisateur :
user-country-US-city-newyork-session-abc123.- Variables
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYpour configurer le proxy globalement ;~/.curlrcpour une config permanente.- Proxies résidentiels : taux de succès 90–98% sur les cibles difficiles vs 30–50% pour le datacenter.
--retry 3 --retry-all-errorspour gérer les 429 et erreurs réseau ;-w "%{http_code} %{time_total}"pour les diagnostics.--tlsv1.3,--compressedet un User-Agent réaliste sont non-négociables en production.- Parallélisme via
xargs -Poucurl --parallel --parallel-max N.- Toujours vérifier l'existence d'une API officielle avant de scraper.
FAQ
Qu'est-ce que l'utilisation d'un proxy avec cURL ?
L'utilisation d'un proxy avec cURL consiste à router les requêtes HTTP, HTTPS ou SOCKS5 via un serveur intermédiaire en utilisant les flags -x ou --proxy, ou les variables d'environnement HTTP_PROXY et HTTPS_PROXY. cURL supporte nativement les proxies HTTP, HTTPS et SOCKS5, avec authentification Basic et Digest.
Pourquoi utiliser un proxy avec cURL est-il important pour les utilisateurs de proxies ?
cURL est l'outil de référence pour les scripts shell et l'automatisation en ligne de commande. Maîtriser la configuration des proxies avec cURL permet de tester rapidement la connectivité, de déboguer les en-têtes de réponse, et d'intégrer la rotation d'IP dans des pipelines Bash sans dépendre d'un SDK spécifique.
Quel type de proxy fonctionne le mieux avec cURL ?
Les proxies résidentiels fonctionnent mieux pour les cibles difficiles comme les sites e-commerce et les SERP, car leurs adresses IP proviennent de FAI réels. Les proxies datacenter sont plus rapides et moins coûteux mais plus facilement détectés. Pour cURL, le protocole SOCKS5 avec socks5h:// est recommandé car il résout le DNS côté proxy, évitant les fuites.
Comment éviter les blocages lors de l'utilisation d'un proxy avec cURL ?
Pour éviter les blocages, utilisez des proxies résidentiels rotatifs, définissez un User-Agent réaliste avec -H, activez la compression avec --compressed, respectez les rate limits avec des délais entre requêtes, et utilisez --retry avec --retry-all-errors pour gérer les échecs temporaires. La rotation de sessions sticky permet de maintenir une IP cohérente quand nécessaire.






