getBody() returnerer en stream-grænseflade, selv når Guzzle allerede har downloadet svaret. Hvis du vil anmode om trinvis netværkslevering gennem en forward-proxy, skal du sætte stream på anmodningen:

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

Dette bruger en eksisterende klient; for et offentligt HTTP-endepunkt skal du vælge en adresse fra HTTP-proxy-listen og erstatte eksempel-proxy-URL'en. Streamingunderstøttelse afhænger af dens handler; stream-grænsefladen alene kan ikke fortælle dig, om handleren leverede bodyen trinvist.

Når svaret ankommer, skal du fortsætte med at læse afgrænsede dele. Konvertering af $body til en streng samler hele bodyen igen. En linjeparser kan også se ud til at hænge, mens den venter på en ny linje, selvom netværksbytes er ankommet. Det er forbrugsforsinkelser, så et skift af proxy fjerner dem ikke.

read_timeout begrænser individuelle læseventetider under den understøttede stream-implementering. Det giver ikke en endeløs feed en samlet levetid på ti sekunder. Håndtér timeout, EOF og fejl separat, og luk bodyen, når behandlingen slutter eller annulleres.

Relaterede artikler