De ce un flux de corp Guzzle poate fi încă tamponat
Interfața corpului, livrarea transportului și propriul dvs. parser pot tampona independent. Folosiți stream explicit și păstrați consumul incremental.
getBody() returnează o interfață de flux chiar și atunci când Guzzle a descărcat deja răspunsul. Pentru a solicita livrare de rețea incrementală printr-un proxy forward, setați stream pe cerere:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Aceasta folosește un client existent; pentru un endpoint HTTP public, alegeți o adresă din lista de proxy HTTP și înlocuiți URL-ul de proxy din exemplu. Suportul pentru streaming depinde de handlerul său; interfața de flux singură nu vă poate spune dacă handlerul a livrat corpul incremental.
Odată ce răspunsul sosește, continuați să citiți porțiuni limitate. Convertirea $body într-un șir adună din nou întregul corp. Un parser de linii poate părea, de asemenea, blocat în timp ce așteaptă o linie nouă, chiar dacă au sosit octeți de rețea. Acestea sunt întârzieri de consum, deci schimbarea proxy-ului nu le va elimina.
read_timeout limitează așteptările individuale de citire în implementarea de flux acceptată. Nu oferă unui flux nesfârșit o durată totală de viață de zece secunde. Gestionați separat timeout-ul, EOF și erorile și închideți corpul când procesarea se termină sau este anulată.