Esempio n. 1
0
 /**
  * Attach a response to the easy handle based on the received headers.
  *
  * @throws \RuntimeException if no headers have been received.
  */
 public function createResponse()
 {
     if (empty($this->headers)) {
         throw new \RuntimeException('No headers have been received');
     }
     // HTTP-version SP status-code SP reason-phrase
     $startLine = explode(' ', array_shift($this->headers), 3);
     $headers = \GuzzleHttp\headers_from_lines($this->headers);
     $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers);
     if (!empty($this->options['decode_content']) && isset($normalizedKeys['content-encoding'])) {
         $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']];
         unset($headers[$normalizedKeys['content-encoding']]);
         if (isset($normalizedKeys['content-length'])) {
             $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']];
             $bodyLength = (int) $this->sink->getSize();
             if ($bodyLength) {
                 $headers[$normalizedKeys['content-length']] = $bodyLength;
             } else {
                 unset($headers[$normalizedKeys['content-length']]);
             }
         }
     }
     // Attach a response to the easy handle with the parsed headers.
     $this->response = new Response($startLine[1], $headers, $this->sink, substr($startLine[0], 5), isset($startLine[2]) ? (string) $startLine[2] : null);
 }
 private function checkDecode(array $options, array $headers, $stream)
 {
     // Automatically decode responses when instructed.
     if (!empty($options['decode_content'])) {
         $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers);
         if (isset($normalizedKeys['content-encoding'])) {
             $encoding = $headers[$normalizedKeys['content-encoding']];
             if ($encoding[0] == 'gzip' || $encoding[0] == 'deflate') {
                 $stream = new Psr7\InflateStream(Psr7\stream_for($stream));
                 // Remove content-encoding header
                 unset($headers[$normalizedKeys['content-encoding']]);
                 // Fix content-length header
                 if (isset($normalizedKeys['content-length'])) {
                     $length = (int) $stream->getSize();
                     if ($length == 0) {
                         unset($headers[$normalizedKeys['content-length']]);
                     } else {
                         $headers[$normalizedKeys['content-length']] = [$length];
                     }
                 }
             }
         }
     }
     return [$stream, $headers];
 }