Ինչու 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-ը և սխալները առանձին, և փակեք մարմինը, երբ մշակումն ավարտվի կամ չեղարկվի։