PHPのcURLで取得したCookieをファイル出力なしで処理する

この投稿は最終更新日から1年以上経過しています

cURL転送オプションのCURLOPT_COOKIEJARを使うと、受け取ったCookieデータはファイルに書き出すか標準出力するかのいずれかだが、レスポンスヘッダからもデータは抜き出せる。つまり、出力することなしに変数として扱うことができる。

以下は、GoogleにアクセスしてレスポンスヘッダからCookieを取得し、name1=value1; name2=value2形式で変数に納めるサンプル。

$ch = curl_init('https://www.google.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$header = curl_exec($ch);

preg_match_all('/^Set-Cookie: ([^;\r\n]+)/mi', $header, $matches);
$cookies = implode('; ', $matches[1]);

$cookiesには、

1P_JAR=2019-09-10-16; NID=188=q8r0m_e_9yOc0GybU(略)

二つのクッキーの組が「; 」で区切られて格納される。

この形式で変数に納めておくと、CURLOPT_COOKIEでCookieを設定する際にそのまま利用できる。

curl_setopt($ch, CURLOPT_COOKIE, $cookies);

環境

参考