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($chCURLOPT_RETURNTRANSFER1);
  
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
  
curl_setopt($chCURLOPT_POSTTRUE);
  
curl_setopt($chCURLOPT_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($chCURLOPT_RETURNTRANSFER1);
  
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
  
curl_setopt($chCURLOPT_COOKIEJAR"cookie");
  
curl_setopt($chCURLOPT_POSTTRUE);
  
curl_setopt($chCURLOPT_POSTFIELDS$params);
  
curl_setopt($chCURLOPT_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($chCURLOPT_RETURNTRANSFER1);
  
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
  
curl_setopt($chCURLOPT_COOKIEJAR"cookie");
  
curl_setopt($chCURLOPT_COOKIEFILE"tmp");
  
curl_setopt($chCURLOPT_POSTTRUE);
  
$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開発者をサポートする情報を掲載しています。