Парсинг HTTP-кода состояния - PullRequest
       10

Парсинг HTTP-кода состояния

10 голосов
/ 18 сентября 2009

Я использую PHP для анализа числовой части ответа кода состояния HTTP. Учитывая стандартный ответ «HTTP / 1.1 200 OK», я бы использовал:

$data = explode(' ', "HTTP/1.1 200 OK");
$code = $data[1];

Я не эксперт по HTTP. Буду ли я когда-нибудь встречать ответ, в котором код не находится в позиции $ data [1], как в примере выше? Я просто хочу быть уверен, что этот метод разграничения кода ответа всегда будет работать для любого ответа.

Спасибо, Брайан

Ответы [ 4 ]

15 голосов
/ 18 сентября 2009

Если есть сомнения, проверьте спецификацию. Спецификация в этом случае для HTTP / 1.1: RFC2616 . В разделе 6.1 он описывает строку состояния , первый компонент ответа , как:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

То есть - один пробел ASCII (SP) должен разделять HTTP-версию и Код состояния - и если вы проверите определение HTTP -Версия Раздел 3.1 ) она не может содержать пробел, и также не может Код состояния .

Так что вы можете использовать этот код.

6 голосов
/ 18 сентября 2009

Нет, если веб-сервер соблюдает стандарты, выполняющие разнесение и кэширование второго элемента массива, это нормально

если вы действительно хотите быть уверенным, используйте регулярное выражение

т.е.

preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|',$subject,$match);
var_dump($match[1]);

Приветствия

6 голосов
/ 18 сентября 2009

Нет, вы никогда не встретите ответ (если это правильный ответ HTTP), который имеет другой формат. См. HTTP RFC (2616) .

1 голос
/ 18 сентября 2009

Нет, все, что вы делаете, в порядке, если все, что вам нужно, это числовой. Однако, если вы также хотите получить сообщение, вы в конечном итоге тоже разделите его, то есть.

HTTP/1.1 404 Not Found
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...