ラボ > PHP:通信絡み

PHPでHTTPリクエストのレスポンスヘッダの取得(get_headers()、$http_response_header、cUrl)

レスポンスヘッダを取得したい

作成日: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"];

タイムアウトなども考慮

参照:PHP・cUrlでタイムアウトの取得

ヘッダを丸ごと取得(cUrl利用の場合:CURLOPT_HEADER)

調査不足のような気もするが・・・ヘッダとボディがまとめて取得されてしまう。
どうにかして分割する必要あり。

curl_setopt($ch, CURLOPT_HEADER, true);
$source = curl_exec($ch);
var_dump($source);

単純に「\r\n\r\n」で分割して1つ目がヘッダで2つ目がボディ部なんだけど・・・リダイレクトしている場合、面倒。
ループさせて1行目でヘッダか否かって感じでチェックさせる感じなんだけど、たぶん例外が多々出てきそうで面倒。

関連項目

PHP・cUrlでタイムアウトの取得
cURLでレスポンスヘッダの取得処理