Guzzle gövde akışı neden hâlâ arabelleğe alınabilir
Gövde arayüzü, taşıma teslimi ve kendi ayrıştırıcınız bağımsız olarak arabelleğe alabilir. stream'i açıkça kullanın ve tüketimi artımlı tutun.
getBody(), Guzzle yanıtı zaten indirmiş olsa bile bir akış arayüzü döndürür. Yönlendirici proxy üzerinden artımlı ağ teslimi istemek için istekte stream ayarını yapın:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Bu, mevcut bir istemciyi kullanır; genel bir HTTP uç noktası için HTTP proxy listesinden bir adres seçin ve örnek proxy URL'sini değiştirin. Akış desteği işleyicisine bağlıdır; yalnızca akış arayüzü, işleyicinin gövdeyi artımlı olarak teslim edip etmediğini söyleyemez.
Yanıt geldikten sonra sınırlı bölümleri okumaya devam edin. $body öğesini dizeye dönüştürmek tüm gövdeyi yeniden toplar. Bir satır ayrıştırıcı, ağ baytları gelmiş olsa bile yeni bir satır beklerken takılmış gibi görünebilir. Bunlar tüketim gecikmeleridir, bu nedenle proxy'yi değiştirmek onları ortadan kaldırmaz.
read_timeout desteklenen akış uygulamasında bireysel okuma beklemelerini sınırlar. Sonsuz bir akışa toplam on saniyelik bir ömür vermez. Zaman aşımı, EOF ve hataları ayrı ayrı ele alın ve işleme bittiğinde veya iptal edildiğinde gövdeyi kapatın.