Я использую PHP для анализа числовой части ответа кода состояния HTTP. Учитывая стандартный ответ "HTTP/1.1 200 OK", я бы использовал:
$data = explode(' ', "HTTP/1.1 200 OK");
$code = $data[1];
Я не эксперт по HTTP. Встречу ли я когда-нибудь ответ, в котором код не находится в позиции $data[1], как в приведенном выше примере? Я просто хочу быть уверен, что этот метод разграничения кода ответа всегда будет работать для любого ответа.
Спасибо, Брайан
Ответ 1 · рейтинг 16 · caf
Если вы сомневаетесь, проверьте спецификацию. Спецификация в данном случае для HTTP/1.1 - RFC2616. В разделе 6.1 описывается строка состояния , первый компонент Response, например:
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
То есть - один пробел ASCII (SP) должен разделять HTTP-версию и код состояния - и если вы проверите определение HTTP-версии (в Раздел 3.1) он не может включать пробел, как и код состояния.
Итак, вы можете использовать этот код.
Ответ 2 · рейтинг 7 · RageZ
Нет, если веб-сервер соблюдает стандарты, делающие взрыв и кэширование второго элемента массива в порядке.
если вы действительно хотите быть уверены, используйте регулярное выражение
i.e.
preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|',$subject,$match);
var_dump($match[1]);
Ваше здоровье
Ответ 4 · рейтинг 2 · Matthew Scharley
Нет, то, что вы делаете, в порядке, если все, что вам нужно, это числовое значение. Однако, если вы также хотите получить сообщение, вы также его разделите, т.е.
HTTP/1.1 404 Not Found