Warum curl HTTP_PROXY ignoriert
Die bewusste HTTP_PROXY-Ausnahme von curl, protokollspezifische Variablen, ALL_PROXY und ein nachvollziehbarer Proxytest über Umgebungsvariablen.
Für HTTP-Ziele setzen Sie die kleingeschriebene Variable http_proxy. curl ignoriert die großgeschriebene Variable HTTP_PROXY absichtlich. In einer 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/Diese Zuweisungen gelten nur für den jeweils folgenden Befehl. Ersetzen Sie den beispielhaften Listener durch Ihren Proxy; für einen Vergleich öffentlicher Endpunkte wählen Sie einen Kandidaten aus der HTTP-Proxyliste. Die Variable https_proxy wählt den Weg zu HTTPS-Zielen; ein Wert mit http:// bezeichnet weiterhin einen gewöhnlichen HTTP-Proxy, der einen Tunnel zum Ziel aufbauen kann. PowerShell und Windows-Befehlsshells verwenden eine andere Zuweisungssyntax.
Warum gerade diese Großschreibung gefährlich ist
CGI-Umgebungen können eingehende Anfrageheader in großgeschriebene HTTP_-Variablen umwandeln. Ein Anfrageheader namens Proxy kann dadurch zu HTTP_PROXY werden. Würde man ihm als Konfiguration für ausgehende Verbindungen vertrauen, könnten Anfragedaten den Proxy bestimmen. Die Kleinschreibungspflicht von curl vermeidet diese Zuordnung; für HTTPS und andere Protokollvariablen gilt diese Ausnahme nicht in gleicher Weise.
Wenn eine andere Variable den Verbindungsweg nicht ändert
Suchen Sie zuerst nach einer protokollspezifischen Variable und danach nach dem Rückfallwert ALL_PROXY. Eine passende NO_PROXY-Regel kann den Proxy umgehen. Auch kleingeschriebene Varianten und konkurrierende Definitionen spielen eine Rolle. Diese Schleife für Unix-artige Shells meldet nur das Vorhandensein, ohne möglicherweise zugangsdatenhaltige Werte auszugeben:
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
donePrüfen Sie die aufgeführten Definitionen lokal. Taucht eine davon erneut auf, kontrollieren Sie die Konfiguration der startenden Shell, des Dienstes, der IDE, des Containers oder der CI-Umgebung. Das Vorhandensein zeigt mögliche Eingaben, aber nicht, welcher Wert sich durchgesetzt hat.
Um eine einzelne Anfrage von diesen Proxyentscheidungen zu isolieren, geben Sie sowohl den Endpunkt als auch eine leere Umgehungsliste an:
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/Für einen erlaubten direkten Vergleich:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Diese Befehle helfen, einen geerbten Verbindungsweg von einem Verbindungsfehler zu unterscheiden. Lesen Sie die Ergebnisse des Proxytests Schritt für Schritt, bevor Sie weitere Umgebungseinstellungen ändern. Wenden Sie die Variablenregeln von curl auf curl an; die Laufzeitumgebung einer Anwendung kann Proxys anders ermitteln und zusammenführen.