Guzzle дене ағыны неге әлі де буферленуі мүмкін
Дене интерфейсі, тасымалдау жеткізілімі және өз талдаушыңыз тәуелсіз буферлей алады. stream-ды анық пайдаланыңыз және тұтынуды біртіндеп ұстаңыз.
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 және қателерді бөлек өңдеп, өңдеу аяқталғанда немесе тоқтатылғанда денені жабыңыз.