Für einen über QProcess gestarteten Downloader bauen Sie die Umgebung des Kindprozesses vor dem Start auf:

auto* download = new QProcess(parent);
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("https_proxy", "http://proxy.example:8080");
download->setProcessEnvironment(env);
download->start("curl", {"--head", "https://www.example.com/"});

Dieses Qt-Fragment setzt ein vorhandenes Elternobjekt, eine Ereignisschleife und ein für das Kind verfügbares curl voraus. Halten Sie den QProcess am Leben, während er läuft, und behandeln Sie seine Fertig- und Fehlersignale in der Anwendung. Für diese Prüfung einer öffentlichen Website ohne konfigurierte Proxy-Zugangsdaten bietet die HTTP-Proxy-Liste geeignete HTTP-Endpunkte für den Proxy-Wert des Kindprozesses.

Der Start mit systemEnvironment bewahrt geerbte Werte wie PATH. Eine ansonsten leere Umgebung aufzubauen und eine einzelne Proxy-Variable hinzuzufügen, würde diese anderen Einträge auslassen.

Der Variablenname ist der Schlüssel. export ist ein Shell-Befehl, kein Teil dieses Schlüssels und kein Programm, das QProcess zuerst starten müsste. Die Umgebung direkt zu übergeben vermeidet außerdem, einen Shell-Befehl um die URL herum zu bauen.

setProcessEnvironment gilt für den danach gestarteten Prozess. Es ändert weder die Umgebung eines bereits laufenden Kindes noch die der Shell, die die Qt-Anwendung gestartet hat.

Der gewählte Downloader muss die Variable verstehen. Dieses Beispiel verwendet https_proxy in Kleinbuchstaben für curls HTTPS-Anfrage und bewahrt geerbte Bypass-Eingaben. Ein anderes Kindprogramm kann eine andere Proxy-Schnittstelle haben.

Ähnliche Artikel