Dlaczego curl ignoruje HTTP_PROXY
Celowy wyjątek curl dla HTTP_PROXY, zmienne poszczególnych protokołów, ALL_PROXY i przewidywalny test proxy oparty na zmiennych środowiskowych.
Dla adresów HTTP ustaw zmienną http_proxy zapisaną małymi literami. curl celowo ignoruje HTTP_PROXY zapisane wielkimi literami. W powłoce 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/Te przypisania dotyczą tylko polecenia bezpośrednio po nich. Zastąp przykładowy adres nasłuchiwania swoim proxy; do porównania publicznych punktów końcowych wybierz kandydata z listy proxy HTTP. Zmienna https_proxy wybiera trasę do adresów HTTPS; wartość z http:// nadal oznacza zwykłe proxy HTTP, które może utworzyć tunel do celu. PowerShell i powłoki poleceń Windows używają innej składni przypisania.
Dlaczego właśnie ten zapis wielkimi literami jest niebezpieczny
Środowiska CGI mogą zamieniać nagłówki przychodzących żądań na zmienne HTTP_ zapisane wielkimi literami. Nagłówek o nazwie Proxy może więc stać się HTTP_PROXY. Uznanie go za zaufaną konfigurację połączeń wychodzących pozwalałoby danym żądania wybierać proxy. Wymóg małych liter w curl zapobiega temu mapowaniu; wyjątek nie dotyczy w identyczny sposób HTTPS i zmiennych innych protokołów.
Gdy zmiana zmiennej nie zmienia trasy
Najpierw szukaj zmiennej konkretnego protokołu, a potem zapasowej ALL_PROXY. Pasująca reguła NO_PROXY może ominąć proxy. Znaczenie mają też warianty pisane małymi literami i konkurujące definicje. Ta pętla dla powłoki uniksowej zgłasza obecność bez wypisywania wartości, które mogą zawierać dane uwierzytelniające:
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
doneSprawdź wymienione definicje lokalnie. Jeśli któraś pojawia się ponownie, przejrzyj konfigurację powłoki uruchamiającej, usługi, IDE, kontenera lub CI. Obecność wskazuje możliwe dane wejściowe; nie mówi, która wartość uzyskała pierwszeństwo.
Aby odizolować jedno żądanie od tych wyborów proxy, podaj zarówno punkt końcowy, jak i pustą listę pomijania:
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/Do porównania z bezpośrednim połączeniem, jeśli jest dozwolone:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Te polecenia pomagają odróżnić odziedziczoną trasę od awarii łączności. Przeczytaj wyniki testu proxy etap po etapie, zanim zmienisz kolejne ustawienia środowiska. Reguły zmiennych curl stosuj do curl; własne środowisko wykonawcze aplikacji może inaczej wykrywać i łączyć konfiguracje proxy.