Δώστε σε ένα θυγατρικό QProcess το περιβάλλον διαμεσολαβητή του
Ορίστε το περιβάλλον που περνά σε ένα θυγατρικό Qt, διατηρώντας τις κληρονομημένες τιμές που χρειάζεται ακόμη.
Για ένα πρόγραμμα λήψης που εκκινείται μέσω 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 proxy προσφέρει υποψήφια τελικά σημεία HTTP για την τιμή διαμεσολαβητή του θυγατρικού.
Η εκκίνηση με systemEnvironment διατηρεί κληρονομημένες τιμές όπως το PATH. Το χτίσιμο ενός κατά τα άλλα κενού περιβάλλοντος και η προσθήκη μίας μεταβλητής διαμεσολαβητή θα παρέλειπε αυτές τις άλλες εγγραφές.
Το όνομα της μεταβλητής είναι το κλειδί. Το export είναι εντολή κελύφους, δεν είναι μέρος αυτού του κλειδιού ούτε εκτελέσιμο που πρέπει να ξεκινήσει πρώτο το QProcess. Η απευθείας μεταβίβαση του περιβάλλοντος αποφεύγει επίσης το χτίσιμο εντολής κελύφους γύρω από το URL.
Το setProcessEnvironment εφαρμόζεται στη διεργασία που ξεκινά μετά. Δεν αλλάζει το περιβάλλον ενός θυγατρικού που ήδη εκτελείται ούτε του κελύφους που ξεκίνησε την εφαρμογή Qt.
Το πρόγραμμα λήψης που επιλέχθηκε πρέπει να κατανοεί τη μεταβλητή. Αυτό το παράδειγμα χρησιμοποιεί πεζά https_proxy για το αίτημα HTTPS του curl και διατηρεί κληρονομημένες εισόδους παράκαμψης. Ένα άλλο θυγατρικό πρόγραμμα μπορεί να έχει άλλη διεπαφή διαμεσολαβητή.