12

PHPを使用して、HTTPステータスコード応答の数値部分を解析しています。標準の「HTTP/1.1200 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を次のように説明しています。

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

つまり、単一のASCIIスペース( )でHTTP-VersionStatus-CodeSPを区切る必要があります。HTTP- Versionの定義(セクション3.1)を確認すると、スペースを含めることはできず、Status-Codeも含めることができません。

したがって、そのコードを使用するのは良いことです。

于 2009-09-18T03:58:24.570 に答える
7

いいえ、ウェブサーバーが爆発を実行し、配列の2番目のアイテムをキャッシュする標準を尊重している場合は問題ありません

本当に正規表現を使用したい場合

すなわち

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 に答える