getBody() gibt eine Stream-Schnittstelle zurück, auch wenn Guzzle die Antwort bereits heruntergeladen hat. Um eine inkrementelle Netzwerkauslieferung über einen Forward-Proxy anzufordern, setzen Sie stream in der Anfrage:

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

Dies verwendet einen vorhandenen Client; für einen öffentlichen HTTP-Endpunkt wählen Sie eine Adresse aus der HTTP-Proxy-Liste und ersetzen Sie die Beispiel-Proxy-URL. Streaming-Unterstützung hängt von ihrem Handler ab; die Stream-Schnittstelle allein kann Ihnen nicht sagen, ob der Handler den Body inkrementell ausgeliefert hat.

Sobald die Antwort eintrifft, lesen Sie weiter begrenzte Teile. Das Umwandeln von $body in eine Zeichenkette sammelt erneut den gesamten Body ein. Ein Zeilenparser kann auch hängen zu bleiben scheinen, während er auf eine neue Zeile wartet, obwohl Netzwerkbytes angekommen sind. Das sind Verbrauchsverzögerungen, daher beseitigt ein Proxy-Wechsel sie nicht.

read_timeout begrenzt einzelne Lese-Wartezeiten unter der unterstützten Stream-Implementierung. Es verleiht einem endlosen Feed keine Gesamtlebensdauer von zehn Sekunden. Behandeln Sie Timeout, EOF und Fehler getrennt und schließen Sie den Body, wenn die Verarbeitung endet oder abgebrochen wird.

Ähnliche Artikel