/** * @param HttpSocketTransporter $transporter * @param iStreamable $body * @param HttpResponse $response * @param Streamable $stream * @param iHttpRequest $request * * @return mixed */ function __invoke($transporter = null, $body = null, $response = null, $stream = null, $request = null) { $headers = $response->getHeaders(); // Decoding Data: if (!$body || !$transporter->optsData()->isAllowDecoding()) { ## do not decode body using raw data return ['body' => $body]; } if ($headers->has('Content-Encoding') && strstr(strtolower($headers->get('Content-Encoding')->renderValueLine()), 'gzip') !== false) { ## Uses PHP's zlib.inflate filter to inflate deflate or gzipped content $body->getResource()->appendFilter(new PhpRegisteredFilter('zlib.inflate'), STREAM_FILTER_READ); ### skip the first 10 bytes for zlib $body = new Streamable\SegmentWrapStream($body, -1, 10); } if ($headers->has('transfer-encoding') && strstr(strtolower($headers->get('Transfer-Encoding')->renderValueLine()), 'chunked') !== false) { $body->getResource()->appendFilter(new DechunkFilter(), STREAM_FILTER_READ); } return ['body' => $body]; }