PHP:クッキーが必要なサイトをスクレイピングする方法 その3

以前POSTでデータを送信しないと、クッキーが取得できないサイトをスクレイピングする方法をご紹介しましたが、一番最後にさりげなく「CURLOPT_POSTFIELDSは複数の値を送信することも可能」と書いておきました。

今回はその話です。

前回、とあるサイトで自動ログインを行ってみたのですが失敗したので、「実は複数の値って無理なんじゃ?」と思っていたのですが、別のサイトでは普通にできました。

サイトによってはセキュリティが厳しくて出来ないこともあるようです。

<?php
//最終的にアクセスしたいページ(例えば商品ページなど)
//クッキーがないとアクセスできない
$url='http://hogehoge.com/page.jsp?id=xxxxxxxxxxxx';

//ログイン画面
$cookie='http://hogehoge.com/login.php';

//IDとパスワード
$params='id=hoge&pass=haha';//←これを追加

//クッキー取得のためのアクセス
$ch=curl_init();//初期化
curl_setopt($ch,CURLOPT_URL,$cookie);
curl_setopt ($ch,CURLOPT_POSTFIELDS,$params);//IDとパスワードをPOSTする
curl_setopt($ch,CURLOPT_HEADER,FALSE);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch,CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
curl_exec($ch);
curl_close($ch);

//見たいページにアクセス
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,FALSE);
curl_setopt($ch,CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
$html=curl_exec($ch);
curl_close($ch);

mb_language('Japanese');
$html=mb_convert_encoding($html,'utf8','auto');
print $html;
?>

前回から1行足してCURLOPT_POSTFIELDSに変数を入れただけです。
追加した1行は、

$params='id=hoge&pass=haha';

URLのパラメータみたいな形式です。
これを配列形式で入れることも可能です。
配列の場合、

$params='array('id'=>'hoge', 'pass'=>'haha');

これで上記の文字列形式とまったく同じ意味になります。
 

コメントを残す

メールアドレスが公開されることはありません。

*