我正在使用PHP來解析HTTP狀態碼響應的數字部分。給定一個標準的「HTTP/1.1 200 OK」響應,我會使用:解析HTTP狀態碼
$data = explode(' ', "HTTP/1.1 200 OK");
$code = $data[1];
我不是HTTP專家。如果上面的例子中的代碼不在$ data [1]的位置,我會遇到一個響應嗎?我只是想確保這種分隔響應代碼的方法將始終適用於任何響應。
感謝布
我正在使用PHP來解析HTTP狀態碼響應的數字部分。給定一個標準的「HTTP/1.1 200 OK」響應,我會使用:解析HTTP狀態碼
$data = explode(' ', "HTTP/1.1 200 OK");
$code = $data[1];
我不是HTTP專家。如果上面的例子中的代碼不在$ data [1]的位置,我會遇到一個響應嗎?我只是想確保這種分隔響應代碼的方法將始終適用於任何響應。
感謝布
如有疑問,請檢查規格。在這種情況下,HTTP/1.1的規格是RFC2616。在Section 6.1,它描述了狀態行,一個響應的第一組分,如:
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
即 - 單一ASCII空間(SP
)必須分開HTTP版本和狀態碼 - 如果你檢查的定義HTTP版本(在Section 3.1)它不能包含空格,也不可以在狀態碼。
所以你很高興與該代碼。
非常感謝 – Brian 2009-09-18 04:17:52
不,你永遠不會遇到的響應(如果它是一個正確的HTTP響應),其具有不同的格式。請參閱HTTP RFC (2616)。
請參閱RFC 2616(http 1.1)和RFC 1945(http 1.0)中的6.1狀態行。他們都確保這3部分,空間分隔的格式。 – mjv 2009-09-18 04:03:29
不,如果你想要的只是數字,你在做什麼是可以的。如果你也想要這個消息,你最終也會分裂它,也就是說。
HTTP/1.1 404 Not Found
爲了防止這種情況,我使用可選的'$ limit'參數,如: '$ aHttpResp = explode('',HttpComm :: $ headers [0],3); \t \t \t \t \t \t // HTTP/1.x ccc〜響應的長描述〜' – grantwparks 2009-10-22 04:58:15
沒有如果Web服務器尊重標準做一個爆炸和高速緩存陣列的第二個項目是精
如果你真的希望確保使用正則表達式
即
preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|',$subject,$match);
var_dump($match[1]);
乾杯
如果你使用cURL,你可能會這樣:curl_getinfo($ ch,CURLINFO_HTTP_CODE);這將返回200或任何http狀態。 – Mickey 2009-09-18 07:20:12