サイトを作成する際に、外部のサイトから情報を取得したい!という時に、phpだとfile_get_contentsを利用して取得すると言うのが、手段として思いつきますが・・・
今回は、file_get_contentsではなく、curlを利用して外部のサイトから情報を取得してみたいと思います。
前置きはなしで、接続するための準備をしましょう。
まずは、接続を行うためのcurlオブジェクトを作成します。
[php]
$conn = curl_init();
[/php]
次に接続に利用する内容を設定します。
SSLを利用する場合には、下記の2行を設定します。
[php]
curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($conn, CURLOPT_SSL_VERIFYHOST, true);
[/php]
ただし、証明書が正しくない場合には下記のように設定を変更しないと接続できません。
SSLを利用する場合には、下記の2行を設定します。
[php]
curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($conn, CURLOPT_SSL_VERIFYHOST, false);
[/php]
次は、接続後にどんな風にレスポンスを取得するか?と言う事を設定します。
[php]
curl_setopt($conn, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($conn, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($conn, CURLOPT_HEADER, true);
[/php]
もし、接続の際のUAを変更したい場合には下記の設定も追加します。
[php]
$user_agent = ‘DummyFox 0.0.1’;
curl_setopt($conn, CURLOPT_USERAGENT, $user_agent);
[/php]
ここからが接続となりますが、GET/POSTで多少ちがいがあるので1つずつ解説します。
まずは、GETでリクエストを行う場合です。
[php]
$url = ‘http://www.google.co.jp/’;
curl_setopt($conn, CURLOPT_URL, $url);
$response = curl_exec($conn);
curl_close($conn);
[/php]
パラメーターがある場合には、単純にURLに付加して接続するだけです。
[php]
$url = ‘http://www.google.co.jp/?q=query’;
curl_setopt($conn, CURLOPT_URL, $url);
$response = curl_exec($conn);
curl_close($conn);
[/php]
続いてはPOSTでリクエストを行う場合です。
[php]
$url = ‘http://www.google.co.jp/’;
$params = array(‘q’ => ‘query’);
curl_setopt($conn, CURLOPT_URL, $url);
curl_setopt($conn, CURLOPT_POST, true);
curl_setopt($conn, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($conn);
curl_close($conn);
[/php]
上記のGET/POSTで戻ってきた値($response)を見ると、HTTPヘッダとボディの両方が含まれた内容が戻ってきます。
また、接続が完了した際には必ず、curl_closeを利用して接続を閉じてください。
※実際に利用する場合には、戻ってきたレスポンスコードを確認した上で取得するなどの処理を行う必要がありますが、今回はそのあたりは省略しています。
curlを利用することで、file_get_contentsよりも接続を行いやすく結果も詳細に取れるので、利用の仕方次第で多種多様なことに使うことが出来ます。
次回は、curlをクラス化して簡単に使えるようにしてみたいと思います。
コメント
[…] http://blog.code4u.org/archives/407 […]