Perché curl ignora HTTP_PROXY
L’eccezione deliberata di curl per HTTP_PROXY, le variabili per protocollo, ALL_PROXY e un test del proxy prevedibile basato sull’ambiente.
Per le destinazioni HTTP, imposta http_proxy in minuscolo. curl ignora deliberatamente HTTP_PROXY in maiuscolo. In una 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/Queste assegnazioni valgono solo per il comando immediatamente successivo. Sostituisci l’indirizzo di ascolto dell’esempio con il tuo proxy; per confrontare endpoint pubblici, scegli un candidato dall’elenco dei proxy HTTP. La variabile https_proxy seleziona un percorso per le destinazioni HTTPS; un valore con http:// indica comunque un normale proxy HTTP capace di creare un tunnel verso la destinazione. PowerShell e le shell dei comandi di Windows usano una sintassi di assegnazione diversa.
Perché proprio questa grafia in maiuscolo è pericolosa
Gli ambienti CGI possono trasformare gli header delle richieste in ingresso in variabili HTTP_ in maiuscolo. Un header chiamato Proxy può quindi diventare HTTP_PROXY. Considerarlo attendibile come configurazione delle connessioni in uscita permetterebbe ai dati della richiesta di scegliere il proxy. L’obbligo del minuscolo in curl evita questa corrispondenza; l’eccezione non si applica in modo identico a HTTPS e alle variabili degli altri protocolli.
Se cambiare la variabile non cambia il percorso
Cerca prima una variabile specifica del protocollo, poi l’alternativa ALL_PROXY. Una regola NO_PROXY corrispondente può escludere il proxy. Contano anche le varianti in minuscolo e le definizioni concorrenti. Questo ciclo per una shell di tipo Unix segnala la presenza senza stampare valori che potrebbero contenere credenziali:
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
doneEsamina localmente le definizioni elencate. Se una ricompare, controlla la configurazione della shell di avvio, del servizio, dell’IDE, del container o della CI. La presenza identifica possibili input; non indica quale valore abbia avuto la precedenza.
Per isolare una richiesta da queste scelte del proxy, specifica sia l’endpoint sia un elenco di esclusioni vuoto:
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/Per un confronto diretto, quando consentito:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Questi comandi aiutano a distinguere un percorso ereditato da un problema di connettività. Leggi i risultati del test del proxy fase per fase prima di cambiare altre impostazioni d’ambiente. Applica le regole delle variabili di curl a curl; il runtime di un’applicazione può rilevare e combinare i proxy in modo diverso.