Zašto Guzzleov tok tijela još može biti baferiran
Sučelje tijela, isporuka prijenosa i vaš vlastiti parser mogu baferirati neovisno. Koristite stream eksplicitno i održavajte potrošnju inkrementalnom.
getBody() vraća sučelje toka čak i kada je Guzzle već preuzeo odgovor. Da biste zatražili inkrementalnu mrežnu isporuku kroz naprijed proxy, postavite stream na zahtjev:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Ovo koristi postojećeg klijenta; za javnu HTTP krajnju točku odaberite adresu s popisa HTTP proxyja i zamijenite primjer URL-a proxyja. Podrška za strujanje ovisi o njegovu rukovatelju; samo sučelje toka ne može vam reći je li rukovatelj isporučio tijelo inkrementalno.
Kad odgovor stigne, nastavite čitati ograničene dijelove. Pretvaranje $body u niz ponovno skuplja cijelo tijelo. Parser redaka također može izgledati zaglavljen dok čeka novi redak, iako su mrežni bajtovi stigli. To su kašnjenja potrošnje, pa promjena proxyja neće ih ukloniti.
read_timeout ograničava pojedinačna čekanja čitanja pod podržanom implementacijom toka. Ne daje beskonačnom feedu ukupni životni vijek od deset sekundi. Rukujte timeoutom, EOF-om i pogreškama odvojeno i zatvorite tijelo kada obrada završi ili bude otkazana.