PluginProbe
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more / 2.5.1
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more v2.5.1
3.7.2 3.7.1 3.7.0 3.6.0 3.6.1 3.5.2 trunk 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.6.0 2.6.1 All 73 releases
stockpack / vendor / guzzlehttp / psr7 / src / Response.php

Response.php in StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more 2.5.1, at vendor/guzzlehttp/psr7/src/Response.php

155 lines 4.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace GuzzleHttp\Psr7;
3
4 use Psr\Http\Message\ResponseInterface;
5 use Psr\Http\Message\StreamInterface;
6
7 /**
8 * PSR-7 response implementation.
9 */
10 class Response implements ResponseInterface
11 {
12 use MessageTrait;
13
14 /** @var array Map of standard HTTP status code/reason phrases */
15 private static $phrases = [
16 100 => 'Continue',
17 101 => 'Switching Protocols',
18 102 => 'Processing',
19 200 => 'OK',
20 201 => 'Created',
21 202 => 'Accepted',
22 203 => 'Non-Authoritative Information',
23 204 => 'No Content',
24 205 => 'Reset Content',
25 206 => 'Partial Content',
26 207 => 'Multi-status',
27 208 => 'Already Reported',
28 300 => 'Multiple Choices',
29 301 => 'Moved Permanently',
30 302 => 'Found',
31 303 => 'See Other',
32 304 => 'Not Modified',
33 305 => 'Use Proxy',
34 306 => 'Switch Proxy',
35 307 => 'Temporary Redirect',
36 400 => 'Bad Request',
37 401 => 'Unauthorized',
38 402 => 'Payment Required',
39 403 => 'Forbidden',
40 404 => 'Not Found',
41 405 => 'Method Not Allowed',
42 406 => 'Not Acceptable',
43 407 => 'Proxy Authentication Required',
44 408 => 'Request Time-out',
45 409 => 'Conflict',
46 410 => 'Gone',
47 411 => 'Length Required',
48 412 => 'Precondition Failed',
49 413 => 'Request Entity Too Large',
50 414 => 'Request-URI Too Large',
51 415 => 'Unsupported Media Type',
52 416 => 'Requested range not satisfiable',
53 417 => 'Expectation Failed',
54 418 => 'I\'m a teapot',
55 422 => 'Unprocessable Entity',
56 423 => 'Locked',
57 424 => 'Failed Dependency',
58 425 => 'Unordered Collection',
59 426 => 'Upgrade Required',
60 428 => 'Precondition Required',
61 429 => 'Too Many Requests',
62 431 => 'Request Header Fields Too Large',
63 451 => 'Unavailable For Legal Reasons',
64 500 => 'Internal Server Error',
65 501 => 'Not Implemented',
66 502 => 'Bad Gateway',
67 503 => 'Service Unavailable',
68 504 => 'Gateway Time-out',
69 505 => 'HTTP Version not supported',
70 506 => 'Variant Also Negotiates',
71 507 => 'Insufficient Storage',
72 508 => 'Loop Detected',
73 511 => 'Network Authentication Required',
74 ];
75
76 /** @var string */
77 private $reasonPhrase = '';
78
79 /** @var int */
80 private $statusCode = 200;
81
82 /**
83 * @param int $status Status code
84 * @param array $headers Response headers
85 * @param string|null|resource|StreamInterface $body Response body
86 * @param string $version Protocol version
87 * @param string|null $reason Reason phrase (when empty a default will be used based on the status code)
88 */
89 public function __construct(
90 $status = 200,
91 array $headers = [],
92 $body = null,
93 $version = '1.1',
94 $reason = null
95 ) {
96 $this->assertStatusCodeIsInteger($status);
97 $status = (int) $status;
98 $this->assertStatusCodeRange($status);
99
100 $this->statusCode = $status;
101
102 if ($body !== '' && $body !== null) {
103 $this->stream = stream_for($body);
104 }
105
106 $this->setHeaders($headers);
107 if ($reason == '' && isset(self::$phrases[$this->statusCode])) {
108 $this->reasonPhrase = self::$phrases[$this->statusCode];
109 } else {
110 $this->reasonPhrase = (string) $reason;
111 }
112
113 $this->protocol = $version;
114 }
115
116 public function getStatusCode()
117 {
118 return $this->statusCode;
119 }
120
121 public function getReasonPhrase()
122 {
123 return $this->reasonPhrase;
124 }
125
126 public function withStatus($code, $reasonPhrase = '')
127 {
128 $this->assertStatusCodeIsInteger($code);
129 $code = (int) $code;
130 $this->assertStatusCodeRange($code);
131
132 $new = clone $this;
133 $new->statusCode = $code;
134 if ($reasonPhrase == '' && isset(self::$phrases[$new->statusCode])) {
135 $reasonPhrase = self::$phrases[$new->statusCode];
136 }
137 $new->reasonPhrase = $reasonPhrase;
138 return $new;
139 }
140
141 private function assertStatusCodeIsInteger($statusCode)
142 {
143 if (filter_var($statusCode, FILTER_VALIDATE_INT) === false) {
144 throw new \InvalidArgumentException('Status code must be an integer value.');
145 }
146 }
147
148 private function assertStatusCodeRange($statusCode)
149 {
150 if ($statusCode < 100 || $statusCode >= 600) {
151 throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.');
152 }
153 }
154 }
155