我正在使用 PHP 来解析 HTTP 状态代码响应的数字部分。给定一个标准的“HTTP/1.1 200 OK”响应,我会使用:
$data = explode(' ', "HTTP/1.1 200 OK");
$code = $data[1];
我不是 HTTP 专家。我是否会遇到代码不在 $data[1] 位置的响应,如上例所示?我只是想确保这种分隔响应代码的方法将始终适用于任何响应。
谢谢,布赖恩
我正在使用 PHP 来解析 HTTP 状态代码响应的数字部分。给定一个标准的“HTTP/1.1 200 OK”响应,我会使用:
$data = explode(' ', "HTTP/1.1 200 OK");
$code = $data[1];
我不是 HTTP 专家。我是否会遇到代码不在 $data[1] 位置的响应,如上例所示?我只是想确保这种分隔响应代码的方法将始终适用于任何响应。
谢谢,布赖恩
如有疑问,请检查规格。在这种情况下,HTTP/1.1 的规范是RFC2616。在第 6.1 节中,它描述了Status-Line ,即Response的第一个组件,如下所示:
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
也就是说 - 单个 ASCII 空格 ( SP
) 必须分隔HTTP-Version和Status-Code - 如果您检查HTTP-Version的定义(在第 3.1 节中),它不能包含空格,并且Status-Code也不能。
因此,您可以使用该代码。
否,如果网络服务器遵守标准,则进行爆炸并缓存数组的第二项就可以了
如果你真的想确定使用正则表达式
IE
preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|',$subject,$match);
var_dump($match[1]);
干杯
不,您永远不会遇到格式不同的响应(如果它是正确的 HTTP 响应)。请参阅HTTP RFC (2616)。
不,如果您想要的只是数字,那么您正在做的事情是可以的。但是,如果您也想要该消息,那么您最终也会拆分它,即。
HTTP/1.1 404 Not Found