サンプル・プログラム
サンプル・プログラムの解説
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ぐるなびには、ユーザーIDとパスワードでログインするが、一度ログインすると、Cookie を利用することでID・パスワードの入力を省略できる。この Cookie は、GMember という名前で登録される。
PHPの fopen 関数でmyぐるなびにアクセスしても、ゲスト扱いになってしまう。これは、 fopen 関数ではCookieを送信していないためである。
CookieはHTTPヘッダの中で送信してやらなければならない。
そこで、 fopen 関数に代わりに fsockopen 関数を使う。
HTTPヘッダについては、「HTTPプロトコルの詳細」が詳しい。
あとは、 fgets 関数を使って、取り出したコンテンツを画面に表示する。
ここで、正規表現などを使い、取り出したコンテンツを分析・再利用すれば便利だろう。
ここでは、例として、「ぐるなび」の会員サイトにアクセスするプログラムを作ってみる。