このWebサイト ひつじ帳 は、管理者がWEB関連の技術をまとめた備忘録サイトです。 Linux,CentOS,PHP,MySQL,Blogger,JavaScript,CSS について記録しています。

PHPでcURL関数を使って外部Webサイトの情報取得やSNSのAPI連携

PHPから外部のWebサイトにアクセスする場合に、様々な情報を取得可能で便利なのが、cURL関数ですね。

HTTPリクエストで簡単に情報を取得するのには、file_get_contentsという関数もあります。
他にも、fsockopen関数でcURLと同様のことが可能です。

HTMLを簡単に取得することができるので、file_get_contents関数は便利です。

しかし、リクエストヘッダーを変更したり、リクエストの手段をカスタマイズするには、file_get_contents関数では限界があります。

そういった際、カスタマイズに有用なのがcURL関数だと思っています。
実際、ここで挙げた関数の中では、cURL関数を最も使用していますね。

GET送信・POST送信でAPI連携にも簡単に対応可能なので、重宝します。
でも時々、cURL関数を利用する時、オプションの指定方法はどうだったかと分からなります。
その都度、調べていて、以前にも「同じようなことを調べたな」と思うことがあります。

SNS(ソーシャルネットワークサービス)とのAPI連携にも必須といっていいくらい、cURL関数を利用しています。

よく利用するcURL関数の使い方を書き残しておくことにします。


file_get_contents 関数の場合

PHP の file_get_contents関数 で、Yahoo!Japan のトップページにアクセスします。

file_get_contents関数の一行だけでも取得可能なのですが、User-Agent を指定しないと非推奨の警告が出るので、User-Agent を指定させています。

PHP file_get_contents 関数

<?php
// ストリームを作成します
$opts = array(
	'http'=>array(
		'method'=>"GET",
		'header'=> "User-Agent: AppleWebKit/10000\r\n"
	)
);

$context = stream_context_create($opts);

// 上で設定した HTTP ヘッダを使用してファイルをオープンします
echo file_get_contents("http://www.yahoo.co.jp", false, $context);

cURL関数の場合

PHP の cURL関数 で、Yahoo!Japan のトップページにアクセスします。

PHP curl 関数

<?php
// 新規 cURL リソースを作成します
$ch = curl_init();

// 取得するURL
curl_setopt($ch, CURLOPT_URL, 'http://www.yahoo.co.jp');

// 接続の試行を待ち続ける秒数 (0=永遠に待ち続ける)
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);

// ヘッダの出力 (true=出力する false=出力しない)
curl_setopt($ch, CURLOPT_HEADER, false);

// HTTPヘッダフィールドを追加する
curl_setopt($ch, CURLOPT_HTTPHEADER, ['User-Agent: AppleWebKit/10000']);

// 返り値を文字列で受け取る (true=受け取る false=受け取らない)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// リダイレクトしている場合、Locationをたどる場合に設定する
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// 最大何回リダイレクトをたどるか
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);

// リダイレクトの際にヘッダのRefererを自動的に追加させる
curl_setopt($ch, CURLOPT_AUTOREFERER, true);

// cURL セッションを実行する (返り値を変数に格納)
$response = curl_exec($ch);

// cURL リソースを閉じ、システムリソースを解放する
curl_close($ch);

echo $response;

POST送信する場合の方法

POST送信する場合のオプション指定の方法です。

curl() POST送信のオプション

<?php

// POST送信
curl_setopt($ch, CURLOPT_POST, true);

// application/x-www-form-urlencoded でエンコード (エンコードしない場合は、http_build_query() 使わない)
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['php' => "PHP"]));

以上、PHPで外部Webサイトにアクセスする方法でした。


0 件のコメント:

人気記事

このブログを検索