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 и ошибки отдельно и закрывайте тело, когда обработка завершается или отменяется.

Похожие статьи