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開発者をサポートする情報を掲載しています。