getBody() renvoie une interface de flux même lorsque Guzzle a déjà téléchargé la réponse. Pour demander une livraison réseau incrémentale via un proxy direct, définissez stream sur la requête :

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

Cela utilise un client existant ; pour un point de terminaison HTTP public, choisissez une adresse dans la liste de proxys HTTP et remplacez l'URL de proxy de l'exemple. La prise en charge du streaming dépend de son gestionnaire ; l'interface de flux seule ne peut pas vous dire si le gestionnaire a livré le corps de façon incrémentale.

Une fois la réponse arrivée, continuez à lire des portions limitées. Convertir $body en chaîne rassemble à nouveau tout le corps. Un analyseur ligne par ligne peut aussi sembler bloqué en attendant un saut de ligne, même si des octets réseau sont arrivés. Ce sont des délais de consommation, donc changer de proxy ne les supprimera pas.

read_timeout limite les attentes de lecture individuelles dans l'implémentation de flux prise en charge. Il ne donne pas à un flux sans fin une durée de vie totale de dix secondes. Gérez séparément le délai d'attente, l'EOF et les erreurs, et fermez le corps lorsque le traitement se termine ou est annulé.

Articles similaires