Զավակ shell-ը չի կարող proxy-ն հետ արտահանել Perl
Սահմանեք Perl-ի ENV-ը ուղղակիորեն և local-ով սահմանափակեք proxy փոփոխականները մեկ զավակ կանչի շուրջ, որպեսզի սկզբնական արժեքները հետո վերադառնան։
export պարունակող backtick հրամանը փոխում է միայն այդ հրամանի համար ստեղծված shell-ը։ Երբ shell-ը դուրս գա, ծնող Perl պրոցեսը դեռ ունի իր նախորդ միջավայրը։
Փոխարենը սահմանեք Perl-ի միջավայրի hash-ը։ local-ը կարող է փոփոխությունը պահել մեկ բլոկի ներսում․
{
local $ENV{http_proxy} = 'http://proxy.example:8080';
local $ENV{https_proxy} = 'http://proxy.example:8080';
my $status = system {
'/usr/bin/curl'
} '/usr/bin/curl', '--fail', '--max-time', '30',
'https://downloads.example/data.csv';
die "Downloader failed: $status" if $status != 0;
}
Զավակը ժառանգում է լոկալացված արժեքները։ Հանրային HTTP ներբեռնման համար HTTP proxy ցանկից վերջնակետը կարող է տրամադրել այդ URL արժեքները։ Երբ բլոկն ավարտվի, Perl-ը վերականգնում է նախորդ գրառումները, ներառյալ դրանց նախկին բացակայությունը։ Ցուցադրվող system արդյունքը Perl-ի պրոցեսի կարգավիճակն է, ոչ թե վերծանված HTTP պատասխանի կոդ։
local-ը դինամիկ շրջանակ ունի․ այդ բլոկի ներսում կանչված այլ Perl կոդ նույնպես տեսնում է ժամանակավոր միջավայրը։ Սա ֆունկցիայով մասնավոր հավատարմագրերի պահոց չէ։
Ստուգեք ընտրված կլիենտի ժառանգված մեծատառ և bypass փոփոխականները։ Թե որ մուտքերն օգտագործել, որոշում է ներբեռնիչը։ Proxy կարգավորումը նույնպես չի փոխում պրոցեսի օգտատիրոջ ինքնությունը և չի պահանջում առանձին root shell միայն ժառանգվելու համար։