Передать дочернему процессу QProcess его прокси-окружение
Задайте окружение, передаваемое одному дочернему процессу Qt, сохранив унаследованные значения, которые ему ещё нужны.
Для загрузчика, запускаемого через QProcess, соберите окружение дочернего процесса до запуска:
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/"});Этот фрагмент Qt предполагает существующий родительский объект, цикл событий и curl, доступный дочернему процессу. Держите QProcess живым, пока он работает, и обрабатывайте его сигналы завершения и ошибки в приложении. Для этой проверки публичного сайта без настроенных учётных данных прокси список HTTP-прокси предлагает подходящие HTTP-эндпоинты для значения прокси дочернего процесса.
Начало с systemEnvironment сохраняет унаследованные значения, такие как PATH. Создание иначе пустого окружения и добавление одной переменной прокси исключило бы эти другие записи.
Имя переменной — это ключ. export — команда оболочки, не часть этого ключа и не исполняемый файл, который QProcess должен запустить первым. Прямая передача окружения также избавляет от сборки команды оболочки вокруг URL.
setProcessEnvironment применяется к процессу, запущенному после этого. Он не меняет окружение уже работающего дочернего процесса или оболочки, запустившей приложение Qt.
Выбранный загрузчик должен понимать переменную. В этом примере используется https_proxy в нижнем регистре для HTTPS-запроса curl, а унаследованные входные данные обхода сохраняются. У другой дочерней программы может быть другой интерфейс прокси.