Por que un fluxo de corpo de Guzzle aínda pode almacenarse en búfer
A interface do corpo, a entrega do transporte e o seu propio analizador poden almacenar en búfer de forma independente. Use stream explicitamente e manteña o consumo incremental.
getBody() devolve unha interface de fluxo mesmo cando Guzzle xa descargou a resposta. Para solicitar unha entrega de rede incremental a través dun proxy directo, estableza stream na solicitude:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Isto usa un cliente existente; para un punto de conexión HTTP público, escolla un enderezo da lista de proxies HTTP e substitúa o URL de proxy do exemplo. A compatibilidade con streaming depende do seu controlador; a interface de fluxo por si soa non pode dicirlle se o controlador entregou o corpo de forma incremental.
Unha vez que chegue a resposta, siga lendo porcións limitadas. Converter $body nunha cadea volve reunir todo o corpo. Un analizador de liñas tamén pode parecer colgado mentres espera unha liña nova, aínda que chegasen bytes de rede. Son atrasos de consumo, así que cambiar o proxy non os eliminará.
read_timeout limita as esperas de lectura individuais baixo a implementación de fluxo admitida. Non dá a un fluxo interminable unha vida total de dez segundos. Xestione o tempo de espera, o EOF e os erros por separado, e peche o corpo cando o procesamento remate ou se cancele.