Пример #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];
 }
Пример #2
0
 protected function __readHeadersFromStream(iStreamable $stream)
 {
     $headers = '';
     ## 255 can be vary, its each header length.
     // TODO just read header part from aggregate stream, it can be tagged for each stream
     while (!$stream->isEOF() && ($line = $stream->readLine("\r\n", 255)) !== null) {
         $break = false;
         $headers .= $line . "\r\n";
         if (trim($line) === '') {
             ## http headers part read complete
             $break = true;
         }
         if ($break) {
             break;
         }
     }
     return $headers;
 }