Dlaczego strumień treści Guzzle nadal może być buforowany
Interfejs treści, dostarczanie przez transport i własny parser mogą buforować niezależnie. Używaj stream jawnie i utrzymuj zużycie przyrostowe.
getBody() zwraca interfejs strumienia nawet wtedy, gdy Guzzle już pobrał odpowiedź. Aby poprosić o przyrostowe dostarczanie sieciowe przez proxy forward, ustaw stream w żądaniu:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
To korzysta z istniejącego klienta; w przypadku publicznego punktu końcowego HTTP wybierz adres z listy proxy HTTP i zastąp przykładowy URL proxy. Obsługa strumieniowania zależy od jego handlera; sam interfejs strumienia nie powie ci, czy handler dostarczył treść przyrostowo.
Gdy odpowiedź dotrze, czytaj dalej ograniczone fragmenty. Konwersja $body na ciąg znaków ponownie zbiera całą treść. Parser wierszy może też wyglądać na zawieszony podczas oczekiwania na nowy wiersz, mimo że bajty sieciowe dotarły. To opóźnienia zużycia, więc zmiana proxy ich nie usunie.
read_timeout ogranicza indywidualne oczekiwania odczytu w obsługiwanej implementacji strumienia. Nie daje nieskończonemu strumieniowi całkowitego czasu życia dziesięciu sekund. Obsługuj limit czasu, EOF i błędy oddzielnie, a treść zamykaj, gdy przetwarzanie się zakończy lub zostanie anulowane.