Với một trình tải xuống khởi chạy qua QProcess, hãy dựng môi trường của tiến trình con trước khi khởi chạy:

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/"});

Đoạn Qt này giả định đã có một đối tượng cha, một vòng lặp sự kiện và curl mà tiến trình con truy cập được. Giữ QProcess sống trong khi nó chạy, và xử lý các tín hiệu hoàn tất cùng lỗi của nó trong ứng dụng. Với lần kiểm tra trang công khai không cấu hình thông tin xác thực proxy này, danh sách proxy HTTP cung cấp các điểm cuối HTTP ứng viên cho giá trị proxy của tiến trình con.

Bắt đầu bằng systemEnvironment giữ lại các giá trị kế thừa như PATH. Dựng một môi trường rỗng rồi thêm một biến proxy sẽ bỏ sót những mục khác đó.

Tên biến chính là chìa khóa. export là lệnh shell, không phải một phần của chìa khóa đó và cũng không phải tệp thực thi mà QProcess phải chạy trước. Truyền môi trường trực tiếp cũng tránh phải dựng một lệnh shell quanh URL.

setProcessEnvironment áp dụng cho tiến trình được khởi chạy sau đó. Nó không thay đổi môi trường của tiến trình con đang chạy hay của shell đã khởi chạy ứng dụng Qt.

Trình tải xuống được chọn phải hiểu biến này. Ví dụ này dùng https_proxy chữ thường cho yêu cầu HTTPS của curl và giữ nguyên các đầu vào bỏ qua kế thừa. Một chương trình con khác có thể có giao diện proxy khác.

Bài viết liên quan