Hvorfor curl ignorerer HTTP_PROXY
Forstå curls bevisste HTTP_PROXY-unntak, protokollspesifikke variabler, ALL_PROXY og en forutsigbar proxytest med miljøvariabler.
For HTTP-mål setter du http_proxy med små bokstaver. curl ignorerer bevisst HTTP_PROXY med store bokstaver. I et POSIX-skall:
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 tilordningene gjelder bare kommandoen rett etter dem. Bytt ut lyttepunktet i eksemplet med din proxy; for å sammenligne offentlige endepunkter kan du velge en kandidat fra listen over HTTP-proxyer. Variabelen https_proxy velger en rute til HTTPS-mål; en verdi med http:// betyr fortsatt en vanlig HTTP-proxy som kan opprette en tunnel til målet. PowerShell og Windows-kommandoskall bruker en annen tilordningssyntaks.
Hvorfor akkurat denne skrivemåten med store bokstaver er farlig
CGI-miljøer kan gjøre headere i innkommende forespørsler om til HTTP_-variabler med store bokstaver. En header med navnet Proxy kan derfor bli HTTP_PROXY. Å stole på den som konfigurasjon for utgående forbindelser ville la forespørselsdata velge proxy. curls krav om små bokstaver unngår denne koblingen; unntaket gjelder ikke på nøyaktig samme måte for HTTPS og andre protokollvariabler.
Hvis en endret variabel ikke endrer ruten
Se først etter en protokollspesifikk variabel, deretter reservevalget ALL_PROXY. En passende NO_PROXY-regel kan omgå proxyen. Varianter med små bokstaver og konkurrerende definisjoner spiller også inn. Denne løkken for et Unix-lignende skall viser tilstedeværelse uten å skrive ut verdier som kan inneholde påloggingsopplysninger:
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øk de oppførte definisjonene lokalt. Hvis en dukker opp igjen, sjekk konfigurasjonen for startskallet, tjenesten, IDE-en, containeren eller CI. Tilstedeværelse viser mulige inndata; det forteller ikke hvilken verdi som fikk forrang.
For å isolere én forespørsel fra disse proxyvalgene oppgir du både endepunktet og en tom liste over unntak:
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/For en tillatt direkte sammenligning:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Disse kommandoene hjelper med å skille en arvet rute fra en tilkoblingsfeil. Les resultatene fra proxytesten trinn for trinn før du endrer flere miljøinnstillinger. Bruk curls variabelregler på curl; en applikasjons eget kjøremiljø kan finne og kombinere proxyer annerledes.