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 응용 프로그램을 시작한 셸의 환경은 바뀌지 않습니다.

선택한 다운로더가 이 변수를 이해해야 합니다. 이 예제는 curl의 HTTPS 요청에 소문자 https_proxy를 사용하고 상속된 우회 입력을 유지합니다. 다른 자식 프로그램은 다른 프록시 인터페이스를 가질 수 있습니다.

관련 글