Viewing file: EasyHandle.php (3.09 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace GuzzleHttp\Handler;
use GuzzleHttp\Psr7\Response; use GuzzleHttp\Utils; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface;
/** * Represents a cURL easy handle and the data it populates. * * @internal */ final class EasyHandle { /** * @var resource|\CurlHandle cURL resource */ public $handle;
/** * @var StreamInterface Where data is being written */ public $sink;
/** * @var array Received HTTP headers so far */ public $headers = [];
/** * @var ResponseInterface|null Received response (if any) */ public $response;
/** * @var RequestInterface Request being sent */ public $request;
/** * @var array Request options */ public $options = [];
/** * @var int cURL error number (if any) */ public $errno = 0;
/** * @var \Throwable|null Exception during on_headers (if any) */ public $onHeadersException;
/** * @var \Exception|null Exception during createResponse (if any) */ public $createResponseException;
/** * Attach a response to the easy handle based on the received headers. * * @throws \RuntimeException if no headers have been received. */ public function createResponse(): void { 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 = Utils::headersFromLines($this->headers); $normalizedKeys = Utils::normalizeHeaderKeys($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']]); } } }
$statusCode = (int) $startLine[1];
// Attach a response to the easy handle with the parsed headers. $this->response = new Response( $statusCode, $headers, $this->sink, \substr($startLine[0], 5), isset($startLine[2]) ? (string) $startLine[2] : null ); }
/** * @param string $name * * @return void * * @throws \BadMethodCallException */ public function __get($name) { $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: ' . $name; throw new \BadMethodCallException($msg); } }
|