Skip to content

Commit 11f6958

Browse files
committed
Add HTTP status helper class
1 parent 2e79d09 commit 11f6958

File tree

1 file changed

+193
-0
lines changed

1 file changed

+193
-0
lines changed

src/Utility/HttpStatus.php

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
<?php
2+
/**
3+
* Helper class for dealing with HTTP status codes.
4+
*
5+
* @package Requests\Utilities
6+
*/
7+
8+
namespace WpOrg\Requests\Utility;
9+
10+
use WpOrg\Requests\Exception\InvalidArgument;
11+
12+
/**
13+
* HTTP status codes helper class.
14+
*
15+
* @package Requests\Utilities
16+
*/
17+
final class HttpStatus {
18+
const TEXT_100 = 'Continue';
19+
const TEXT_101 = 'Switching Protocols';
20+
const TEXT_200 = 'OK';
21+
const TEXT_201 = 'Created';
22+
const TEXT_202 = 'Accepted';
23+
const TEXT_203 = 'Non-Authoritative Information';
24+
const TEXT_204 = 'No Content';
25+
const TEXT_205 = 'Reset Content';
26+
const TEXT_206 = 'Partial Content';
27+
const TEXT_300 = 'Multiple Choices';
28+
const TEXT_301 = 'Moved Permanently';
29+
const TEXT_302 = 'Found';
30+
const TEXT_303 = 'See Other';
31+
const TEXT_304 = 'Not Modified';
32+
const TEXT_305 = 'Use Proxy';
33+
const TEXT_306 = '(Unused)';
34+
const TEXT_307 = 'Temporary Redirect';
35+
const TEXT_400 = 'Bad Request';
36+
const TEXT_401 = 'Unauthorized';
37+
const TEXT_402 = 'Payment Required';
38+
const TEXT_403 = 'Forbidden';
39+
const TEXT_404 = 'Not Found';
40+
const TEXT_405 = 'Method Not Allowed';
41+
const TEXT_406 = 'Not Acceptable';
42+
const TEXT_407 = 'Proxy Authentication Required';
43+
const TEXT_408 = 'Request Timeout';
44+
const TEXT_409 = 'Conflict';
45+
const TEXT_410 = 'Gone';
46+
const TEXT_411 = 'Length Required';
47+
const TEXT_412 = 'Precondition Failed';
48+
const TEXT_413 = 'Request Entity Too Large';
49+
const TEXT_414 = 'Request-URI Too Long';
50+
const TEXT_415 = 'Unsupported Media Type';
51+
const TEXT_416 = 'Requested Range Not Satisfiable';
52+
const TEXT_417 = 'Expectation Failed';
53+
const TEXT_418 = 'I\'m a teapot';
54+
const TEXT_428 = 'Precondition Required';
55+
const TEXT_429 = 'Too Many Requests';
56+
const TEXT_431 = 'Request Header Fields Too Large';
57+
const TEXT_500 = 'Internal Server Error';
58+
const TEXT_501 = 'Not Implemented';
59+
const TEXT_502 = 'Bad Gateway';
60+
const TEXT_503 = 'Service Unavailable';
61+
const TEXT_504 = 'Gateway Timeout';
62+
const TEXT_505 = 'HTTP Version Not Supported';
63+
const TEXT_511 = 'Network Authentication Required';
64+
65+
const TEXT_WITH_CODE_100 = '100 ' . self::TEXT_100;
66+
const TEXT_WITH_CODE_101 = '101 ' . self::TEXT_101;
67+
const TEXT_WITH_CODE_200 = '200 ' . self::TEXT_200;
68+
const TEXT_WITH_CODE_201 = '201 ' . self::TEXT_201;
69+
const TEXT_WITH_CODE_202 = '202 ' . self::TEXT_202;
70+
const TEXT_WITH_CODE_203 = '203 ' . self::TEXT_203;
71+
const TEXT_WITH_CODE_204 = '204 ' . self::TEXT_204;
72+
const TEXT_WITH_CODE_205 = '205 ' . self::TEXT_205;
73+
const TEXT_WITH_CODE_206 = '206 ' . self::TEXT_206;
74+
const TEXT_WITH_CODE_300 = '300 ' . self::TEXT_300;
75+
const TEXT_WITH_CODE_301 = '301 ' . self::TEXT_301;
76+
const TEXT_WITH_CODE_302 = '302 ' . self::TEXT_302;
77+
const TEXT_WITH_CODE_303 = '303 ' . self::TEXT_303;
78+
const TEXT_WITH_CODE_304 = '304 ' . self::TEXT_304;
79+
const TEXT_WITH_CODE_305 = '305 ' . self::TEXT_305;
80+
const TEXT_WITH_CODE_306 = '306 ' . self::TEXT_306;
81+
const TEXT_WITH_CODE_307 = '307 ' . self::TEXT_307;
82+
const TEXT_WITH_CODE_400 = '400 ' . self::TEXT_400;
83+
const TEXT_WITH_CODE_401 = '401 ' . self::TEXT_401;
84+
const TEXT_WITH_CODE_402 = '402 ' . self::TEXT_402;
85+
const TEXT_WITH_CODE_403 = '403 ' . self::TEXT_403;
86+
const TEXT_WITH_CODE_404 = '404 ' . self::TEXT_404;
87+
const TEXT_WITH_CODE_405 = '405 ' . self::TEXT_405;
88+
const TEXT_WITH_CODE_406 = '406 ' . self::TEXT_406;
89+
const TEXT_WITH_CODE_407 = '407 ' . self::TEXT_407;
90+
const TEXT_WITH_CODE_408 = '408 ' . self::TEXT_408;
91+
const TEXT_WITH_CODE_409 = '409 ' . self::TEXT_409;
92+
const TEXT_WITH_CODE_410 = '410 ' . self::TEXT_410;
93+
const TEXT_WITH_CODE_411 = '411 ' . self::TEXT_411;
94+
const TEXT_WITH_CODE_412 = '412 ' . self::TEXT_412;
95+
const TEXT_WITH_CODE_413 = '413 ' . self::TEXT_413;
96+
const TEXT_WITH_CODE_414 = '414 ' . self::TEXT_414;
97+
const TEXT_WITH_CODE_415 = '415 ' . self::TEXT_415;
98+
const TEXT_WITH_CODE_416 = '416 ' . self::TEXT_416;
99+
const TEXT_WITH_CODE_417 = '417 ' . self::TEXT_417;
100+
const TEXT_WITH_CODE_418 = '418 ' . self::TEXT_418;
101+
const TEXT_WITH_CODE_428 = '428 ' . self::TEXT_428;
102+
const TEXT_WITH_CODE_429 = '429 ' . self::TEXT_429;
103+
const TEXT_WITH_CODE_431 = '431 ' . self::TEXT_431;
104+
const TEXT_WITH_CODE_500 = '500 ' . self::TEXT_500;
105+
const TEXT_WITH_CODE_501 = '501 ' . self::TEXT_501;
106+
const TEXT_WITH_CODE_502 = '502 ' . self::TEXT_502;
107+
const TEXT_WITH_CODE_503 = '503 ' . self::TEXT_503;
108+
const TEXT_WITH_CODE_504 = '504 ' . self::TEXT_504;
109+
const TEXT_WITH_CODE_505 = '505 ' . self::TEXT_505;
110+
const TEXT_WITH_CODE_511 = '511 ' . self::TEXT_511;
111+
112+
/**
113+
* Map of status codes to their text.
114+
*
115+
* @var array<string>
116+
*/
117+
const MAP = [
118+
100 => self::TEXT_100,
119+
101 => self::TEXT_101,
120+
200 => self::TEXT_200,
121+
201 => self::TEXT_201,
122+
202 => self::TEXT_202,
123+
203 => self::TEXT_203,
124+
204 => self::TEXT_204,
125+
205 => self::TEXT_205,
126+
206 => self::TEXT_206,
127+
300 => self::TEXT_300,
128+
301 => self::TEXT_301,
129+
302 => self::TEXT_302,
130+
303 => self::TEXT_303,
131+
304 => self::TEXT_304,
132+
305 => self::TEXT_305,
133+
306 => self::TEXT_306,
134+
307 => self::TEXT_307,
135+
400 => self::TEXT_400,
136+
401 => self::TEXT_401,
137+
402 => self::TEXT_402,
138+
403 => self::TEXT_403,
139+
404 => self::TEXT_404,
140+
405 => self::TEXT_405,
141+
406 => self::TEXT_406,
142+
407 => self::TEXT_407,
143+
408 => self::TEXT_408,
144+
409 => self::TEXT_409,
145+
410 => self::TEXT_410,
146+
411 => self::TEXT_411,
147+
412 => self::TEXT_412,
148+
413 => self::TEXT_413,
149+
414 => self::TEXT_414,
150+
415 => self::TEXT_415,
151+
416 => self::TEXT_416,
152+
417 => self::TEXT_417,
153+
418 => self::TEXT_418,
154+
428 => self::TEXT_428,
155+
429 => self::TEXT_429,
156+
431 => self::TEXT_431,
157+
500 => self::TEXT_500,
158+
501 => self::TEXT_501,
159+
502 => self::TEXT_502,
160+
503 => self::TEXT_503,
161+
504 => self::TEXT_504,
162+
505 => self::TEXT_505,
163+
511 => self::TEXT_511,
164+
];
165+
166+
/**
167+
* Get the status message from a status code.
168+
*
169+
* @param int|string $code Status code.
170+
* @return string Status message.
171+
*/
172+
public static function get_text($code) {
173+
if (!self::is_valid_code($code)) {
174+
throw InvalidArgument::create(1, '$code', 'a valid HTTP status code as an int or numeric string', $code);
175+
}
176+
177+
return self::MAP[$code];
178+
}
179+
180+
/**
181+
* Verify whether a status code is valid.
182+
*
183+
* @param int|string $code Status code to check.
184+
* @return bool Whether the status code is valid.
185+
*/
186+
public static function is_valid_code($code) {
187+
if (!is_int($code) && !is_string($code)) {
188+
return false;
189+
}
190+
191+
return array_key_exists($code, self::MAP);
192+
}
193+
}

0 commit comments

Comments
 (0)