PHPでCookie要求サイトにアクセスする

(1/1)
PHPでは、HTTPヘッダの送受信を制御することができる。この機能を利用することで、Cookie を要求するようなサイトに自動アクセスすることができる。
ここでは、例として、「ぐるなび」の会員サイトにアクセスするプログラムを作ってみる。

サンプル・プログラム

サンプル・プログラムの解説

   9: $host   = "my.gnavi.co.jp";             //ぐるなび
  10: $path   = "/";
  11: $cookie = "GMember=xxxxxxxxxxxxxxxxx";  //あなたのCookieを記入
  12: 
  13: $sock = fsockopen($host, 80, $errno, $errstr, 60);
  14: 
  15: //エラー対応
  16: if ($sock == FALSE) {
  17:     echo "errno=$errno  errstr=$errstr";
  18:     break;
  19: }
  20: 
  21: $str = "";          //ダミー
  22: fputs($sock, "POST " . $path . " HTTP/1.1\r\n");
  23: fputs($sock, "Host: $host\r\n");
  24: fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n");
  25: fputs($sock, "Content-length: " . strlen($str. "\r\n");
  26: 
  27: fputs($sock, "Cookie: $cookie\r\n");    //Cookieを送り出す
  28: fputs($sock, "\r\n");
  29: fputs($sock, "$str\r\n");
  30: 
  31: //コンテンツを表示するだけ
  32: while (!feof($sock)) {
  33:     $str = fgets($sock);
  34:     echo $str;
  35: }
  36: fclose($sock);

ぐるなびに会員登録してあると、「myぐるなび」が利用できるようになる。
myぐるなびには、ユーザーIDとパスワードでログインするが、一度ログインすると、Cookie を利用することでID・パスワードの入力を省略できる。この Cookie は、GMember という名前で登録される。

PHPの fopen  関数でmyぐるなびにアクセスしても、ゲスト扱いになってしまう。これは、 fopen  関数ではCookieを送信していないためである。
CookieはHTTPヘッダの中で送信してやらなければならない。

そこで、 fopen  関数に代わりに fsockopen  関数を使う。
HTTPヘッダについては、「HTTPプロトコルの詳細」が詳しい。

あとは、 fgets  関数を使って、取り出したコンテンツを画面に表示する。
ここで、正規表現などを使い、取り出したコンテンツを分析・再利用すれば便利だろう。

参考サイト

(この項おわり)
header