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 은 지원되는 스트림 구현에서 개별 읽기 대기를 제한합니다. 끝없는 피드에 10초의 총 수명을 주지는 않습니다. 타임아웃, EOF, 오류를 별도로 처리하고 처리가 끝나거나 취소되면 본문을 닫으세요.

관련 글