Guzzle bədən axını niyə hələ də buferlənə bilər
Bədən interfeysi, nəqliyyat çatdırılması və öz analizatorunuz ayrı-ayrılıqda buferləyə bilər. stream-i açıq şəkildə istifadə edin və istehlakı artımlı saxlayın.
getBody() Guzzle cavabı artıq yükləmiş olsa belə, axın interfeysi qaytarır. Forvard proxy vasitəsilə artımlı şəbəkə çatdırılması tələb etmək üçün sorğuda stream təyin edin:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Bu, mövcud klientdən istifadə edir; ictimai HTTP son nöqtəsi üçün HTTP proxy siyahısından ünvan seçin və nümunədəki proxy URL-ni əvəz edin. Axın dəstəyi onun handler-indən asılıdır; yalnız axın interfeysi handler-in bədəni artımlı çatdırdığını deyə bilməz.
Cavab gəldikdən sonra məhdud hissələri oxumağa davam edin. $body-ü sətrə çevirmək bütün bədəni yenidən toplayır. Sətir analizatoru şəbəkə baytları gəldiyi halda yeni sətir gözləyərkən donmuş kimi görünə bilər. Bunlar istehlak gecikmələridir, ona görə proxy-ni dəyişmək onları aradan qaldırmayacaq.
read_timeout dəstəklənən axın tətbiqi altında fərdi oxuma gözləmələrini məhdudlaşdırır. Sonsuz axına on saniyəlik ümumi ömür vermir. Taymautu, EOF və xətaları ayrıca idarə edin və emal bitdikdə və ya ləğv edildikdə bədəni bağlayın.