getBody() trả về giao diện luồng ngay cả khi Guzzle đã tải xong phản hồi. Để yêu cầu phân phối mạng tăng dần qua proxy chuyển tiếp, đặt stream trên yêu cầu:

$response = $client->request('GET', 'https://example.com/stream', [
    'proxy' => 'http://proxy.example:8080',
    'stream' => true,
    'read_timeout' => 10,
]);
$body = $response->getBody();

Cách này dùng một ứng dụng khách sẵn có; với điểm cuối HTTP công khai, chọn một địa chỉ từ danh sách proxy HTTP và thay URL proxy trong ví dụ. Hỗ trợ truyền phát phụ thuộc vào trình xử lý của nó; chỉ giao diện luồng không thể cho bạn biết trình xử lý có phân phối thân theo từng phần hay không.

Khi phản hồi đến, hãy tiếp tục đọc từng phần có giới hạn. Chuyển $body thành chuỗi sẽ thu gom lại toàn bộ thân. Một bộ phân tích theo dòng cũng có thể trông như bị treo khi chờ dòng mới, dù các byte mạng đã đến. Đây là độ trễ tiêu thụ, nên đổi proxy sẽ không loại bỏ chúng.

read_timeout giới hạn các lần chờ đọc riêng lẻ trong triển khai luồng được hỗ trợ. Nó không cho một nguồn cấp vô tận tuổi thọ tổng cộng mười giây. Xử lý thời gian chờ, EOF và lỗi riêng biệt, và đóng thân khi quá trình xử lý kết thúc hoặc bị hủy.

Bài viết liên quan