Для загрузчика, запускаемого через 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, а унаследованные входные данные обхода сохраняются. У другой дочерней программы может быть другой интерфейс прокси.

Похожие статьи