עבור מוריד שמופעל דרך 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 חי כל עוד הוא פועל, וטפלו באותות הסיום והשגיאה שלו ביישום. לבדיקת אתר ציבורי זו ללא פרטי proxy מוגדרים, רשימת שרתי פרוקסי HTTP מציעה נקודות קצה HTTP מועמדות לערך ה-proxy של הבן.

התחלה מ-systemEnvironment משמרת ערכים שהורשו כמו PATH. בניית סביבה ריקה אחרת והוספת משתנה proxy אחד הייתה משמיטה את הערכים האחרים האלה.

שם המשתנה הוא המפתח. export הוא פקודת מעטפת, אינו חלק מהמפתח הזה ואינו קובץ הרצה ש-QProcess צריך להפעיל קודם. העברת הסביבה ישירות גם מונעת בניית פקודת מעטפת סביב ה-URL.

setProcessEnvironment חל על התהליך שיופעל לאחר מכן. הוא אינו משנה את הסביבה של בן שכבר פועל או של המעטפת שהפעילה את יישום ה-Qt.

המוריד שנבחר חייב להבין את המשתנה. דוגמה זו משתמשת ב-https_proxy באותיות קטנות עבור בקשת ה-HTTPS של curl ומשמרת קלטי עקיפה שהורשו. תוכנית בן אחרת יכולה להיות בעלת ממשק proxy אחר.

מאמרים קשורים