12

我正在使用 PHP 来解析 HTTP 状态代码响应的数字部分。给定一个标准的“HTTP/1.1 200 OK”响应,我会使用:

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

我不是 HTTP 专家。我是否会遇到代码不在 $data[1] 位置的响应,如上例所示?我只是想确保这种分隔响应代码的方法将始终适用于任何响应。

谢谢,布赖恩

4

4 回答 4

16

如有疑问,请检查规格。在这种情况下,HTTP/1.1 的规范是RFC2616。在第 6.1 节中,它描述了Status-Line ,即Response的第一个组件,如下所示:

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

也就是说 - 单个 ASCII 空格 ( SP) 必须分隔HTTP-VersionStatus-Code - 如果您检查HTTP-Version的定义(在第 3.1 节中),它不能包含空格,并且Status-Code也不能。

因此,您可以使用该代码。

于 2009-09-18T03:58:24.570 回答
7

否,如果网络服务器遵守标准,则进行爆炸并缓存数组的第二项就可以了

如果你真的想确定使用正则表达式

IE

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

干杯

于 2009-09-18T03:55:49.740 回答
6

不,您永远不会遇到格式不同的响应(如果它是正确的 HTTP 响应)。请参阅HTTP RFC (2616)

于 2009-09-18T03:54:12.543 回答
2

不,如果您想要的只是数字,那么您正在做的事情是可以的。但是,如果您也想要该消息,那么您最终也会拆分它,即。

HTTP/1.1 404 Not Found
于 2009-09-18T03:54:58.737 回答