ה-proxy מספק נתונים. פונקציית הכתיבה שלכם מחזירה את הערך השגוי. אז libcurl מפסיק, והקוד שמסביב מדווח על „כשל הורדה דרך proxy“ נוסף.

הפונקציה חייבת לדווח כמה בתים שהתקבלו היא באמת טיפלה. החזרת מספר אחר מסמנת כשל. עבור יעד כתיבה חוסם במכוון, מקטע יכול להיראות כך:

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

ספרו בתים, לא תווים מוצגים. הנתונים יכולים להיות בינאריים או חלק מרצף טקסט רב-בייטי. קריאה אחת אינה בהכרח שורה אחת, מסמך JSON אחד או הודעה אחת מהשירות.

ניתוח מצטבר זקוק למצב משלו בין קריאות. לעומת זאת, צבירת כל מקטע עד להשלמה עשויה להיות נכונה לתגובה קטנה ומוגבלת, אך אינה מדיניות זיכרון לזרם גדול או אינסופי.

שמרו את תוצאת ההעברה ואת הראיות לכשל של הקריאה. שגיאת דיסק מקומית או עצירת מנתח יכולות להתרחש לאחר שנקבע מסלול proxy תקף. אם אתם מתכוונים לעצור אחרי קידומת, סמנו את עצירת הקריאה המכוונת הזו בנפרד. החלפת כתובת ה-proxy אינה יכולה לתקן יעד שהפסיק לקבל נתונים.

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