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

Схожі статті