Por que um stream de corpo do Guzzle ainda pode ser armazenado em buffer
A interface do corpo, a entrega do transporte e o seu próprio analisador podem armazenar em buffer de forma independente. Use stream explicitamente e mantenha o consumo incremental.
getBody() retorna uma interface de stream mesmo quando o Guzzle já baixou a resposta. Para solicitar entrega de rede incremental através de um proxy forward, defina stream na requisição:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Isso usa um cliente existente; para um endpoint HTTP público, escolha um endereço da lista de proxies HTTP e substitua a URL de proxy do exemplo. O suporte a streaming depende do handler; a interface de stream sozinha não pode dizer se o handler entregou o corpo incrementalmente.
Assim que a resposta chegar, continue lendo porções limitadas. Converter $body em string reúne o corpo inteiro novamente. Um analisador de linhas também pode parecer travado enquanto espera uma nova linha, mesmo que bytes de rede tenham chegado. São atrasos de consumo, então trocar o proxy não os removerá.
read_timeout limita as esperas de leitura individuais sob a implementação de stream suportada. Não dá a um feed sem fim um tempo de vida total de dez segundos. Trate timeout, EOF e erros separadamente, e feche o corpo quando o processamento terminar ou for cancelado.