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.

Artigos relacionados