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 σε συμβολοσειρά συγκεντρώνει ξανά ολόκληρο το σώμα. Ένας αναλυτής γραμμών μπορεί επίσης να φαίνεται κολλημένος ενώ περιμένει μια νέα γραμμή, παρόλο που έχουν φτάσει bytes δικτύου. Είναι καθυστερήσεις κατανάλωσης, οπότε η αλλαγή του διακομιστή μεσολάβησης δεν θα τις εξαλείψει.

read_timeout περιορίζει τις μεμονωμένες αναμονές ανάγνωσης στο πλαίσιο της υποστηριζόμενης υλοποίησης ροής. Δεν δίνει σε μια ατελείωτη ροή συνολική διάρκεια ζωής δέκα δευτερολέπτων. Χειριστείτε το χρονικό όριο, το EOF και τα σφάλματα ξεχωριστά και κλείστε το σώμα όταν η επεξεργασία τελειώσει ή ακυρωθεί.

Σχετικά άρθρα