Kāpēc Guzzle ķermeņa straume joprojām var tikt buferēta
Ķermeņa saskarne, transporta piegāde un jūsu pašu parsētājs var buferēt neatkarīgi. Izmantojiet stream skaidri un saglabājiet patēriņu pakāpenisku.
getBody() atgriež straumes saskarni pat tad, ja Guzzle jau ir lejupielādējis atbildi. Lai pieprasītu pakāpenisku tīkla piegādi caur pāradresācijas starpniekserveri, iestatiet stream pieprasījumā:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Tas izmanto esošu klientu; publiskam HTTP galapunktam izvēlieties adresi no HTTP starpniekserveru saraksta un aizstājiet piemēra starpniekservera URL. Straumēšanas atbalsts ir atkarīgs no tā apstrādātāja; tikai straumes saskarne nevar pateikt, vai apstrādātājs ķermeni piegādāja pakāpeniski.
Kad atbilde ir saņemta, turpiniet lasīt ierobežotas daļas. $body pārvēršana virknē atkal savāc visu ķermeni. Rindu parsētājs var arī šķist iekāries, gaidot jaunu rindu, lai gan tīkla baiti ir ieradušies. Tie ir patēriņa aizkavējumi, tāpēc starpniekservera maiņa tos nenovērsīs.
read_timeout ierobežo atsevišķas lasīšanas gaidīšanas atbalstītajā straumes ieviešanā. Tas nepiešķir bezgalīgai plūsmai desmit sekunžu kopējo mūžu. Apstrādājiet taimautu, EOF un kļūdas atsevišķi, un aizveriet ķermeni, kad apstrāde beidzas vai tiek atcelta.