Hvorfor curl ignorerer HTTP_PROXY
Forstå curls bevidste undtagelse for HTTP_PROXY, protokolspecifikke variabler, ALL_PROXY og en forudsigelig proxytest med miljøvariabler.
Til HTTP-destinationer skal du angive http_proxy med små bogstaver. curl ignorerer bevidst HTTP_PROXY med store bogstaver. I en POSIX-shell:
http_proxy=http://127.0.0.1:8080 curl http://example.com/
https_proxy=http://127.0.0.1:8080 curl https://example.com/Disse tildelinger gælder kun for den kommando, der følger umiddelbart efter. Erstat eksemplets lyttepunkt med din proxy; vælg en kandidat fra listen over HTTP-proxyer til sammenligning af offentlige endepunkter. Variablen https_proxy vælger en rute til HTTPS-destinationer; en værdi med http:// betyder stadig en almindelig HTTP-proxy, som kan oprette en tunnel til destinationen. PowerShell og Windows-kommandoskaller bruger en anden tildelingssyntaks.
Hvorfor netop denne stavemåde med store bogstaver er farlig
CGI-miljøer kan omdanne indgående forespørgslers headere til HTTP_-variabler med store bogstaver. En header med navnet Proxy kan derfor blive til HTTP_PROXY. Hvis den blev betroet som konfiguration for udgående forbindelser, kunne forespørgselsdata vælge proxyen. curls krav om små bogstaver undgår denne kobling; undtagelsen gælder ikke på helt samme måde for HTTPS og andre protokolvariabler.
Hvis en ændret variabel ikke ændrer ruten
Se først efter en protokolspecifik variabel og derefter reservevalget ALL_PROXY. En matchende NO_PROXY-regel kan omgå proxyen. Varianter med små bogstaver og konkurrerende definitioner har også betydning. Denne løkke til en Unix-lignende shell viser tilstedeværelse uden at udskrive værdier, der kan indeholde loginoplysninger:
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
doneUndersøg de anførte definitioner lokalt. Hvis en dukker op igen, så kontrollér konfigurationen for den startende shell, tjenesten, IDE'en, containeren eller CI. Tilstedeværelse viser mulige input; det fortæller ikke, hvilken værdi der fik forrang.
For at isolere én forespørgsel fra disse proxyvalg skal du angive både endepunktet og en tom liste over undtagelser:
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/Til en tilladt direkte sammenligning:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Disse kommandoer hjælper med at skelne en nedarvet rute fra en forbindelsesfejl. Læs proxytestens resultater trin for trin, før du ændrer flere miljøindstillinger. Anvend curls variabelregler på curl; en applikations eget kørselsmiljø kan finde og kombinere proxyer anderledes.