Proč může být tělový proud Guzzle stále ukládán do vyrovnávací paměti
Rozhraní těla, doručení transportu i váš vlastní parser mohou ukládat do vyrovnávací paměti nezávisle. Používejte stream explicitně a udržujte spotřebu přírůstkovou.
getBody() vrací rozhraní proudu, i když Guzzle už odpověď stáhl. Chcete-li požádat o přírůstkové síťové doručení přes dopředný proxy, nastavte stream v požadavku:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Používá existujícího klienta; pro veřejný koncový bod HTTP vyberte adresu ze seznamu HTTP proxy a nahraďte ukázkovou URL proxy. Podpora streamování závisí na jeho handleru; samotné rozhraní proudu vám neřekne, zda handler doručil tělo přírůstkově.
Jakmile odpověď dorazí, čtěte dál omezené části. Převod $body na řetězec znovu shromáždí celé tělo. Parser řádků také může vypadat zaseknutý při čekání na nový řádek, i když síťové bajty dorazily. Jsou to zpoždění spotřeby, takže změna proxy je neodstraní.
read_timeout omezuje jednotlivá čekání na čtení v rámci podporované implementace proudu. Nedává nekonečnému feedu celkovou životnost deset sekund. Zpracovávejte časový limit, EOF a chyby odděleně a zavřete tělo, když zpracování skončí nebo je zrušeno.