WebサイトのHTML情報を取得する際にcurlを使用することがあります。 curlとはWebブラウザのコマンドライン版のようなもので、与えられた コマンドを元にページ情報を取得する機能です。 curlを使用すれば、ログインフォームにPOSTでデータを渡してログイン 処理を行い、ログイン後のページ情報を取得するようなことも可能です。 ですが、ログイン処理を行った後、ログイン後にしか行けないような別の ページの情報を取得しようとすると、セッションが引き継げずHTMLが取得 できない場合があります。 今回はそのような場合に対処する方法をお教えします。
まずは、curlを使用してログイン処理を行い、ログイン後のページを 表示するスクリプトです。 ここではPHPプロ!にログインする処理を記述しています。
<?php
$params = array(
"login-name" => "name",
"login-pass" => "pass"
"submit" => "ログイン",
);
$ch = curl_init("http://www.phppro.jp/members/login.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$output = curl_exec($ch);
curl_close($ch);
print $output;
?>
これが成功すると、ログイン後のページが出力されるはずです。 「PHPプロ!」メンバーページへようこそ! の文字が表示されていると思います。
それでは次は、ログイン後に別のページに遷移し、そのページのHTMLを取得する スクリプトを書いて見ましょう。 ここではPHPプロ!にログイン後にポイント使用履歴のページを取得するスクリ プトを作成しています。
<?php
$params = array(
"login-name" => 'nakamuraya',
"login-password" => 'gerogero',
"submit" => "ログイン"
);
$fp = fopen("tmp", "w");
$ch = curl_init("http://www.phppro.jp/members/login.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_WRITEHEADER, $fp); $
output = curl_exec($ch);
fclose($fp); curl_close($ch);
print "CURL OUTPUT:\n{$output}\n";
$ch = curl_init("http://www.phppro.jp/members/history.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie");
curl_setopt($ch, CURLOPT_COOKIEFILE, "tmp");
curl_setopt($ch, CURLOPT_POST, TRUE);
$output = curl_exec($ch);
print_r(curl_getinfo($ch));
curl_close($ch);
print "CURL OUTPUT:\n{$output}\n";
?>
このスクリプトでは、COOKIE情報を tmp というファイルに保存して引き継いで います。 成功すると、ログイン後のページに続いてポイント使用履歴のページが表示され るはずです。 使えるワザですのでぜひ一度試してみてください。
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。