מדוע זרם גוף של Guzzle עדיין יכול להיות נאגר
ממשק הגוף, מסירת התעבורה והמנתח שלך יכולים לאגור באופן עצמאי. השתמש ב-stream במפורש ושמור על צריכה הדרגתית.
getBody() מחזיר ממשק זרם גם כאשר Guzzle כבר הוריד את התגובה. כדי לבקש מסירת רשת הדרגתית דרך פרוקסי קדמי, הגדר stream בבקשה:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
זה משתמש בלקוח קיים; עבור נקודת קצה HTTP ציבורית, בחר כתובת מרשימת פרוקסי HTTP והחלף את כתובת הפרוקסי לדוגמה. תמיכת הזרמה תלויה במטפל שלה; ממשק הזרם לבדו אינו יכול לומר לך אם המטפל מסר את הגוף באופן הדרגתי.
לאחר שהתגובה מגיעה, המשך לקרוא חלקים מוגבלים. המרת $body למחרוזת אוספת שוב את כל הגוף. מנתח שורות עשוי גם להיראות תקוע בזמן המתנה לשורה חדשה, למרות שבתי רשת הגיעו. אלה עיכובי צריכה, ולכן החלפת הפרוקסי לא תסיר אותם.
read_timeout מגביל המתנות קריאה בודדות תחת מימוש הזרם הנתמך. הוא אינו נותן לזרם אינסופי אורך חיים כולל של עשר שניות. טפל בפסק זמן, ב-EOF ובשגיאות בנפרד, וסגור את הגוף כאשר העיבוד מסתיים או מבוטל.