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);
環境
- PHP 7.3.9
- cURL 7.64.0