Пример #1
0
 /**
  * @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];
 }