Pourquoi curl ignore HTTP_PROXY
Comprendre l’exception volontaire de curl pour HTTP_PROXY, les variables par protocole, ALL_PROXY et les tests de proxy fondés sur l’environnement.
Pour les destinations HTTP, définissez http_proxy en minuscules. curl ignore délibérément HTTP_PROXY en majuscules. Dans un shell POSIX :
http_proxy=http://127.0.0.1:8080 curl http://example.com/
https_proxy=http://127.0.0.1:8080 curl https://example.com/Ces affectations ne concernent que la commande qui les suit. Remplacez le point d’écoute de l’exemple par votre proxy ; pour comparer des points d’accès publics, choisissez un candidat dans la liste de proxys HTTP. La variable https_proxy sélectionne une route pour les destinations HTTPS ; une valeur en http:// désigne toujours un proxy HTTP ordinaire capable d’établir un tunnel vers la destination. PowerShell et les interpréteurs de commandes Windows utilisent une autre syntaxe d’affectation.
Pourquoi cette graphie en majuscules est dangereuse
Les environnements CGI peuvent convertir les en-têtes des requêtes reçues en variables HTTP_ en majuscules. Un en-tête nommé Proxy peut donc devenir HTTP_PROXY. Lui faire confiance comme configuration des connexions sortantes permettrait aux données d’une requête de choisir un proxy. L’exigence de minuscules de curl évite cette correspondance ; l’exception ne s’applique pas de façon identique à HTTPS et aux variables des autres protocoles.
Si modifier la variable ne change pas la route
Cherchez d’abord une variable propre au protocole, puis la valeur de repli ALL_PROXY. Une règle NO_PROXY correspondante peut contourner le proxy. Les variantes en minuscules et les définitions concurrentes comptent également. Cette boucle pour un shell de type Unix signale leur présence sans afficher les valeurs susceptibles de contenir des identifiants :
for name in http_proxy HTTP_PROXY https_proxy HTTPS_PROXY all_proxy ALL_PROXY no_proxy NO_PROXY; do
if printenv "$name" >/dev/null; then
printf '%s is set\n' "$name"
fi
doneExaminez localement les définitions signalées. Si l’une réapparaît, vérifiez la configuration du shell de lancement, du service, de l’IDE, du conteneur ou de la CI. La présence indique des entrées possibles, pas la valeur qui a été retenue.
Pour isoler une requête de ces choix de proxy, fournissez à la fois le point d’accès et une liste de contournement vide :
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/Pour une comparaison directe autorisée :
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Ces commandes aident à distinguer une route héritée d’un problème de connectivité. Interprétez les résultats du test de proxy étape par étape avant de modifier davantage les paramètres d’environnement. Appliquez les règles de variables de curl à curl ; l’environnement d’exécution propre à une application peut découvrir et combiner les proxys autrement.