getBody() retorna una interfície de flux fins i tot quan Guzzle ja ha descarregat la resposta. Per sol·licitar un lliurament de xarxa incremental a través d'un proxy directe, establiu stream a la sol·licitud:

$response = $client->request('GET', 'https://example.com/stream', [
    'proxy' => 'http://proxy.example:8080',
    'stream' => true,
    'read_timeout' => 10,
]);
$body = $response->getBody();

Això utilitza un client existent; per a un punt de connexió HTTP públic, trieu una adreça de la llista de proxys HTTP i substituïu l'URL de proxy de l'exemple. El suport de streaming depèn del seu controlador; la interfície de flux per si sola no us pot dir si el controlador ha lliurat el cos de manera incremental.

Un cop arribi la resposta, continueu llegint porcions limitades. Convertir $body en una cadena recull tot el cos de nou. Un analitzador de línies també pot semblar penjat mentre espera una línia nova, encara que hagin arribat bytes de xarxa. Són retards de consum, així que canviar el proxy no els eliminarà.

read_timeout limita les esperes de lectura individuals sota la implementació de flux admesa. No dóna a un flux sense fi una vida total de deu segons. Gestiona el temps d'espera, l'EOF i els errors per separat, i tanca el cos quan el processament acabi o es cancel·li.

Articles relacionats