作成日:2018-02-14, 更新日:2018-06-07
ヘッダだけ取得(get_headers())
レスポンスヘッダは配列で返ってくる。
$url = 〇〇〇; $aryHeader = get_headers($url); var_dump($aryHeader);
file_get_contents()時のヘッダ取得($http_response_header)
「file_get_contents()」をした際に「$http_response_header」にレスポンスヘッダが格納される。
$http_response_header = null; $url = 〇〇〇; $aryHeader = file_get_contents($url); var_dump($http_response_header);
タイムアウトのときも対応させたい:PHPでタイムアウトありのステータスコード関連(file_get_contents())
注意
「$http_response_header = null」を入れずに、複数回使う場合は注意が必要。
基本「前回のレスポンスヘッダが格納」されるので「前回レスポンスヘッダを取得できなかった」場合に値が更新されない。
$url01 = 〇〇〇; // 存在するドメイン $aryHeader01 = file_get_contents($url01); var_dump($http_response_header); $url02 = 〇〇〇; // 存在しないドメインやタイムアウトするようなURL←レスポンスヘッダが取得できない $aryHeader02 = file_get_contents($url02); var_dump($http_response_header);
上記の場合、2回目の「var_dump($http_response_header);」は「file_get_contents($url01)」のレスポンスヘッダが表示される。
ヘッダだけ取得(cUrl利用の場合:curl_getinfo())
「curl_getinfo()」で取得する。ただ・・・最後のステータスコードしか返ってこない。
「リダイレクト時、リダイレクト先を取得」する設定をしているとき、どのタイミングのステータスコードが欲しいのか・・・最終的なステータスコードのみ欲しいなら問題なし。
$source = curl_exec($ch); $curlInfo = curl_getinfo($ch); echo $curlInfo["http_code"];
タイムアウトなども考慮
ヘッダを丸ごと取得(cUrl利用の場合:CURLOPT_HEADER)
調査不足のような気もするが・・・ヘッダとボディがまとめて取得されてしまう。
どうにかして分割する必要あり。
curl_setopt($ch, CURLOPT_HEADER, true); $source = curl_exec($ch); var_dump($source);
単純に「\r\n\r\n」で分割して1つ目がヘッダで2つ目がボディ部なんだけど・・・リダイレクトしている場合、面倒。
ループさせて1行目でヘッダか否かって感じでチェックさせる感じなんだけど、たぶん例外が多々出てきそうで面倒。