Donner à un enfant QProcess son environnement proxy
Définissez l'environnement transmis à un enfant Qt tout en conservant les valeurs héritées dont il a encore besoin.
Pour un téléchargeur lancé via QProcess, construisez l'environnement de l'enfant avant de le démarrer :
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/"});Cet extrait Qt suppose un objet parent existant, une boucle d'événements et curl disponible pour l'enfant. Gardez le QProcess en vie pendant son exécution et traitez ses signaux de fin et d'erreur dans l'application. Pour ce contrôle d'un site public sans identifiants proxy configurés, la liste de proxys HTTP propose des points de terminaison HTTP candidats pour la valeur proxy de l'enfant.
Partir de systemEnvironment préserve les valeurs héritées comme PATH. Construire un environnement vide et y ajouter une seule variable proxy omettrait ces autres entrées.
Le nom de la variable est la clé. export est une commande shell, ne fait pas partie de cette clé et n'est pas un exécutable que QProcess devrait lancer d'abord. Transmettre l'environnement directement évite aussi de construire une commande shell autour de l'URL.
setProcessEnvironment s'applique au processus démarré ensuite. Il ne modifie pas l'environnement d'un enfant déjà en cours d'exécution ni celui du shell qui a lancé l'application Qt.
Le téléchargeur choisi doit comprendre la variable. Cet exemple utilise https_proxy en minuscules pour la requête HTTPS de curl et conserve les entrées de contournement héritées. Un autre programme enfant peut avoir une autre interface proxy.