რატომ შეიძლება 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 და შეცდომები ცალ-ცალკე, და დახურეთ სხეული, როცა დამუშავება დასრულდება ან გაუქმდება.