Eine Kind-Shell kann einen Proxy nicht zurück nach Perl exportieren
Setzen Sie Perls ENV direkt und lokalisieren Sie Proxy-Variablen mit local um einen einzelnen Kindaufruf herum, damit die ursprünglichen Werte danach zurückkehren.
Ein Backtick-Befehl mit export ändert nur die Shell, die für genau diesen Befehl erzeugt wurde. Wenn die Shell endet, hat der übergeordnete Perl-Prozess weiterhin seine bisherige Umgebung.
Setzen Sie stattdessen den Umgebungs-Hash von Perl. local kann die Änderung innerhalb eines Blocks halten:
{
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;
}
Das Kind erbt die lokalisierten Werte. Für einen öffentlichen HTTP-Download kann ein Endpunkt aus der HTTP-Proxy-Liste diese URL-Werte liefern. Wenn der Block endet, stellt Perl die vorherigen Einträge wieder her, einschließlich ihres vorherigen Fehlens. Das angezeigte system-Ergebnis ist der Prozessstatus von Perl, kein dekodierter HTTP-Antwortcode.
local ist dynamisch gültig: Anderer Perl-Code, der innerhalb dieses Blocks aufgerufen wird, sieht die temporäre Umgebung ebenfalls. Es ist kein privater Anmeldedatenspeicher pro Funktion.
Prüfen Sie geerbte Großbuchstaben- und Bypass-Variablen für den gewählten Client. Welche Eingaben verwendet werden, entscheidet der Downloader. Eine Proxy-Einstellung ändert außerdem nicht die Benutzeridentität des Prozesses und erfordert keine eigene Root-Shell, nur damit sie geerbt wird.