Zakaj je lahko tok telesa Guzzle še vedno medpomniljen
Vmesnik telesa, dostava prevoza in vaš lastni razčlenjevalnik lahko medpomnijo neodvisno. Uporabite stream izrecno in ohranite porabo postopno.
getBody() vrne vmesnik toka tudi, ko je Guzzle odgovor že prenesel. Če želite zahtevati postopno omrežno dostavo prek posrednega proxyja, nastavite stream v zahtevi:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
To uporablja obstoječega odjemalca; za javno končno točko HTTP izberite naslov s seznama proxyjev HTTP in zamenjajte primer URL proxyja. Podpora pretakanja je odvisna od njegovega upravljalnika; samo vmesnik toka vam ne more povedati, ali je upravljalnik dostavil telo postopno.
Ko odgovor prispe, nadaljujte z branjem omejenih delov. Pretvorba $body v niz znova zbere celotno telo. Razčlenjevalnik vrstic je lahko videti tudi zataknjen med čakanjem na novo vrstico, čeprav so omrežni bajti že prispeli. To so zakasnitve porabe, zato jih zamenjava proxyja ne bo odpravila.
read_timeout omejuje posamezne čakalne čase branja v podprti izvedbi toka. Ne daje neskončnemu toku skupne življenjske dobe desetih sekund. Ločeno obravnavajte časovno omejitev, EOF in napake ter zaprite telo, ko se obdelava konča ali prekliče.