【问题标题】:Parsing HTTP status code解析 HTTP 状态码
【发布时间】:2009-09-18 11:58:24
【问题描述】:

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

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

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

谢谢,布赖恩

【问题讨论】:

  • 如果您使用 cURL,您可能会喜欢: curl_getinfo($ch,CURLINFO_HTTP_CODE);这将返回 200 或任何 http 状态。

标签: php http header http-status-codes


【解决方案1】:

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

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

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

所以你很高兴使用该代码。

【讨论】:

    【解决方案2】:

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

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

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

    干杯

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 参见 RFC 2616 (http 1.1) 和 RFC 1945 (http 1.0) 中的 6.1 状态行。它们都确保了这 3 个部分,以空格分隔的格式。
      【解决方案4】:

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

      HTTP/1.1 404 Not Found
      

      【讨论】:

      • 为了防止这种情况,我使用了可选的$limit 参数,例如:$aHttpResp = explode(' ', HttpComm::$headers[0], 3); // HTTP/1.x ccc ~long description of the response~
      猜你喜欢
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2012-06-12
      • 2011-04-06
      • 2015-12-29
      • 2010-12-15
      相关资源
      最近更新 更多