لماذا قد يظل تدفق جسم 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 يحد من مرات انتظار القراءة الفردية ضمن تنفيذ التدفق المدعوم. لا يمنح تدفقًا لا ينتهي عمرًا إجماليًا قدره عشر ثوانٍ. تعامل مع المهلة ونهاية الملف والأخطاء بشكل منفصل، وأغلق الجسم عند انتهاء المعالجة أو إلغائها.