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 এবং ত্রুটি আলাদাভাবে পরিচালনা করুন, এবং প্রক্রিয়াকরণ শেষ বা বাতিল হলে বডি বন্ধ করুন।