| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 
							- <?php
 
- declare(strict_types=1);
 
- namespace GuzzleHttp\Psr7;
 
- use Psr\Http\Message\ResponseInterface;
 
- use Psr\Http\Message\StreamInterface;
 
- /**
 
-  * PSR-7 response implementation.
 
-  */
 
- class Response implements ResponseInterface
 
- {
 
-     use MessageTrait;
 
-     /** Map of standard HTTP status code/reason phrases */
 
-     private const PHRASES = [
 
-         100 => 'Continue',
 
-         101 => 'Switching Protocols',
 
-         102 => 'Processing',
 
-         200 => 'OK',
 
-         201 => 'Created',
 
-         202 => 'Accepted',
 
-         203 => 'Non-Authoritative Information',
 
-         204 => 'No Content',
 
-         205 => 'Reset Content',
 
-         206 => 'Partial Content',
 
-         207 => 'Multi-status',
 
-         208 => 'Already Reported',
 
-         300 => 'Multiple Choices',
 
-         301 => 'Moved Permanently',
 
-         302 => 'Found',
 
-         303 => 'See Other',
 
-         304 => 'Not Modified',
 
-         305 => 'Use Proxy',
 
-         306 => 'Switch Proxy',
 
-         307 => 'Temporary Redirect',
 
-         308 => 'Permanent Redirect',
 
-         400 => 'Bad Request',
 
-         401 => 'Unauthorized',
 
-         402 => 'Payment Required',
 
-         403 => 'Forbidden',
 
-         404 => 'Not Found',
 
-         405 => 'Method Not Allowed',
 
-         406 => 'Not Acceptable',
 
-         407 => 'Proxy Authentication Required',
 
-         408 => 'Request Time-out',
 
-         409 => 'Conflict',
 
-         410 => 'Gone',
 
-         411 => 'Length Required',
 
-         412 => 'Precondition Failed',
 
-         413 => 'Request Entity Too Large',
 
-         414 => 'Request-URI Too Large',
 
-         415 => 'Unsupported Media Type',
 
-         416 => 'Requested range not satisfiable',
 
-         417 => 'Expectation Failed',
 
-         418 => 'I\'m a teapot',
 
-         422 => 'Unprocessable Entity',
 
-         423 => 'Locked',
 
-         424 => 'Failed Dependency',
 
-         425 => 'Unordered Collection',
 
-         426 => 'Upgrade Required',
 
-         428 => 'Precondition Required',
 
-         429 => 'Too Many Requests',
 
-         431 => 'Request Header Fields Too Large',
 
-         451 => 'Unavailable For Legal Reasons',
 
-         500 => 'Internal Server Error',
 
-         501 => 'Not Implemented',
 
-         502 => 'Bad Gateway',
 
-         503 => 'Service Unavailable',
 
-         504 => 'Gateway Time-out',
 
-         505 => 'HTTP Version not supported',
 
-         506 => 'Variant Also Negotiates',
 
-         507 => 'Insufficient Storage',
 
-         508 => 'Loop Detected',
 
-         510 => 'Not Extended',
 
-         511 => 'Network Authentication Required',
 
-     ];
 
-     /** @var string */
 
-     private $reasonPhrase;
 
-     /** @var int */
 
-     private $statusCode;
 
-     /**
 
-      * @param int                                  $status  Status code
 
-      * @param (string|string[])[]                  $headers Response headers
 
-      * @param string|resource|StreamInterface|null $body    Response body
 
-      * @param string                               $version Protocol version
 
-      * @param string|null                          $reason  Reason phrase (when empty a default will be used based on the status code)
 
-      */
 
-     public function __construct(
 
-         int $status = 200,
 
-         array $headers = [],
 
-         $body = null,
 
-         string $version = '1.1',
 
-         string $reason = null
 
-     ) {
 
-         $this->assertStatusCodeRange($status);
 
-         $this->statusCode = $status;
 
-         if ($body !== '' && $body !== null) {
 
-             $this->stream = Utils::streamFor($body);
 
-         }
 
-         $this->setHeaders($headers);
 
-         if ($reason == '' && isset(self::PHRASES[$this->statusCode])) {
 
-             $this->reasonPhrase = self::PHRASES[$this->statusCode];
 
-         } else {
 
-             $this->reasonPhrase = (string) $reason;
 
-         }
 
-         $this->protocol = $version;
 
-     }
 
-     public function getStatusCode(): int
 
-     {
 
-         return $this->statusCode;
 
-     }
 
-     public function getReasonPhrase(): string
 
-     {
 
-         return $this->reasonPhrase;
 
-     }
 
-     public function withStatus($code, $reasonPhrase = ''): ResponseInterface
 
-     {
 
-         $this->assertStatusCodeIsInteger($code);
 
-         $code = (int) $code;
 
-         $this->assertStatusCodeRange($code);
 
-         $new = clone $this;
 
-         $new->statusCode = $code;
 
-         if ($reasonPhrase == '' && isset(self::PHRASES[$new->statusCode])) {
 
-             $reasonPhrase = self::PHRASES[$new->statusCode];
 
-         }
 
-         $new->reasonPhrase = (string) $reasonPhrase;
 
-         return $new;
 
-     }
 
-     /**
 
-      * @param mixed $statusCode
 
-      */
 
-     private function assertStatusCodeIsInteger($statusCode): void
 
-     {
 
-         if (filter_var($statusCode, FILTER_VALIDATE_INT) === false) {
 
-             throw new \InvalidArgumentException('Status code must be an integer value.');
 
-         }
 
-     }
 
-     private function assertStatusCodeRange(int $statusCode): void
 
-     {
 
-         if ($statusCode < 100 || $statusCode >= 600) {
 
-             throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.');
 
-         }
 
-     }
 
- }
 
 
  |