Mengapa strim badan Guzzle masih boleh dibuffer
Antara muka badan, penghantaran pengangkutan dan penghurai anda sendiri boleh membuffer secara bebas. Gunakan stream secara eksplisit dan kekalkan penggunaan secara berperingkat.
getBody() mengembalikan antara muka strim walaupun Guzzle telah memuat turun respons. Untuk meminta penghantaran rangkaian berperingkat melalui proksi hadapan, tetapkan stream pada permintaan:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Ini menggunakan klien sedia ada; untuk titik akhir HTTP awam, pilih alamat daripada senarai proksi HTTP dan gantikan URL proksi contoh. Sokongan penstriman bergantung pada pengendalinya; antara muka strim sahaja tidak dapat memberitahu anda sama ada pengendali telah menghantar badan secara berperingkat.
Setelah respons tiba, teruskan membaca bahagian terhad. Menukar $body kepada rentetan mengumpul semula keseluruhan badan. Penghurai baris juga mungkin kelihatan tergantung semasa menunggu baris baharu, walaupun bait rangkaian telah tiba. Ini ialah kelewatan penggunaan, jadi menukar proksi tidak akan menghapuskannya.
read_timeout mengehadkan penantian bacaan individu di bawah pelaksanaan strim yang disokong. Ia tidak memberikan suapan tanpa henti jangka hayat keseluruhan sepuluh saat. Kendalikan tamat masa, EOF dan ralat secara berasingan, dan tutup badan apabila pemprosesan tamat atau dibatalkan.