Beispiel #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 createResponse(RequestInterface $request, array $options, $stream, $startTime)
 {
     $hdrs = $this->lastHeaders;
     $this->lastHeaders = [];
     $parts = explode(' ', array_shift($hdrs), 3);
     $ver = explode('/', $parts[0])[1];
     $status = $parts[1];
     $reason = isset($parts[2]) ? $parts[2] : null;
     $headers = \GuzzleHttp\headers_from_lines($hdrs);
     list($stream, $headers) = $this->checkDecode($options, $headers, $stream);
     $stream = Psr7\stream_for($stream);
     $sink = $this->createSink($stream, $options);
     $response = new Psr7\Response($status, $headers, $sink, $ver, $reason);
     if (isset($options['on_headers'])) {
         try {
             $options['on_headers']($response);
         } catch (\Exception $e) {
             $msg = 'An error was encountered during the on_headers event';
             $ex = new RequestException($msg, $request, $response, $e);
             return new RejectedPromise($ex);
         }
     }
     if ($sink !== $stream) {
         $this->drain($stream, $sink);
     }
     $this->invokeStats($options, $request, $startTime, $response, null);
     return new FulfilledPromise($response);
 }
Beispiel #3
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);
     // Attach a response to the easy handle with the parsed headers.
     $this->response = new Response($startLine[1], \GuzzleHttp\headers_from_lines($this->headers), $this->sink, substr($startLine[0], 5), isset($startLine[2]) ? (int) $startLine[2] : null);
 }