Einem QProcess-Kind seine Proxy-Umgebung geben
Legen Sie die Umgebung fest, die an einen einzelnen Qt-Kindprozess übergeben wird, und erhalten Sie dabei die geerbten Werte, die er weiterhin braucht.
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.