Зашто 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 проксија и замените пример URL-а проксија. Подршка за стримовање зависи од његовог руковаоца; само интерфејс тока не може вам рећи да ли је руковалац испоручио тело инкрементално.
Када одговор стигне, наставите да читате ограничене делове. Претварање $body у ниску поново сакупља цело тело. Парсер редова такође може изгледати заглављен док чека нови ред, иако су мрежни бајтови стигли. То су кашњења потрошње, па промена проксија их неће уклонити.
read_timeout ограничава појединачна чекања читања у оквиру подржане имплементације тока. Не даје бесконачном току укупно трајање од десет секунди. Рукујте тајмаутом, EOF-ом и грешкама одвојено и затворите тело када обрада заврши или буде отказана.