Ο proxy παραδίδει δεδομένα. Η συνάρτηση επιστροφής εγγραφής σας επιστρέφει λάθος τιμή. Στη συνέχεια το libcurl ματαιώνει και ο γύρω κώδικας αναφέρει άλλη μια «αποτυχία λήψης μέσω proxy».

Η συνάρτηση πρέπει να αναφέρει πόσα byte που ελήφθησαν χειρίστηκε πραγματικά. Η επιστροφή διαφορετικού αριθμού σηματοδοτεί αποτυχία. Για έναν σκόπιμα αποκλειστικό προορισμό εγγραφής, ένα απόσπασμα μπορεί να μοιάζει έτσι:

curl_setopt($handle, CURLOPT_PROXY, 'http://proxy.example:8080');
curl_setopt($handle, CURLOPT_WRITEFUNCTION,
    function ($handle, $chunk) use ($sink) {
        $written = fwrite($sink, $chunk);
        return $written === false ? 0 : $written;
    }
);

Αυτό προϋποθέτει ότι η υπάρχουσα εφαρμογή κατέχει το handle και τον προορισμό εγγραφής. Μια αποτυχημένη ή σύντομη εγγραφή ματαιώνει αντί να ισχυριστεί σιωπηλά ότι ολόκληρο το τμήμα αποθηκεύτηκε. Ένας μη αποκλειστικός προορισμός χρειάζεται κατάλληλο σχεδιασμό προσωρινής αποθήκευσης και παύσης/συνέχισης· το μικρό απόσπασμα δεν παρέχει κάτι τέτοιο.

Μετρήστε byte, όχι εμφανιζόμενους χαρακτήρες. Τα δεδομένα μπορεί να είναι δυαδικά ή μέρος ακολουθίας κειμένου πολλών byte. Μια κλήση δεν είναι απαραίτητα μία γραμμή, ένα έγγραφο JSON ή ένα μήνυμα από την υπηρεσία.

Η σταδιακή ανάλυση χρειάζεται δική της κατάσταση μεταξύ των κλήσεων. Αντιστρόφως, η συσσώρευση κάθε τμήματος μέχρι την ολοκλήρωση μπορεί να είναι σωστή για μια μικρή περιορισμένη απόκριση, αλλά δεν είναι πολιτική μνήμης για μεγάλη ή ατελείωτη ροή.

Διατηρήστε το αποτέλεσμα της μεταφοράς και τα στοιχεία αποτυχίας της συνάρτησης. Ένα τοπικό σφάλμα δίσκου ή ματαίωση του αναλυτή μπορεί να συμβεί αφού έχει καθιερωθεί μια έγκυρη διαδρομή proxy. Αν σκοπεύετε να σταματήσετε μετά από ένα πρόθεμα, σημειώστε αυτή τη σκόπιμη διακοπή της συνάρτησης ξεχωριστά. Η αντικατάσταση της διεύθυνσης proxy δεν μπορεί να διορθώσει έναν προορισμό που σταμάτησε να δέχεται δεδομένα.

Σχετικά άρθρα