getBody() повертає інтерфейс потоку, навіть коли Guzzle вже завантажив відповідь. Щоб запросити поступову мережеву доставку через прямий проксі, встановіть stream у запиті:

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

Це використовує наявний клієнт; для публічної кінцевої точки HTTP виберіть адресу зі списку HTTP-проксі і замініть приклад URL проксі. Підтримка потокового передавання залежить від її обробника; лише інтерфейс потоку не може сказати, чи обробник доставив тіло поступово.

Коли відповідь надійде, продовжуйте читати обмежені частини. Перетворення $body на рядок знову збирає все тіло. Парсер рядків також може виглядати завислим в очікуванні нового рядка, навіть якщо мережеві байти вже надійшли. Це затримки споживання, тому зміна проксі їх не усуне.

read_timeout обмежує окремі очікування читання в підтримуваній реалізації потоку. Він не дає нескінченному потоку загальний термін життя у десять секунд. Обробляйте тайм-аут, EOF і помилки окремо та закривайте тіло, коли обробка завершується або скасовується.

Схожі статті