PHPでAPI叩くなら、file_get_contentsでいいじゃない?
こんにちは。
開発チームのワイルド担当、まんだいです。
PHPのfile_get_contentsというメソッドをご存知でしょうか?
ファイルオープンの処理が簡潔に書けるため、重宝するメソッドかと思いますが、このメソッドにはファイル読み込み以外にも、簡単なウェブアクセスツールとしての使い方があります。
今日はこの辺りがどこまで使えるのか、限界を調査してみたいと思います。
file_get_contentsの基本
簡単なサンプルとして、弊社のトップページを取得するには、以下の様なソースになります。
<?php $html = file_get_contents('https://beyondjapan.com');
これは問題ないと思います。
これがうまく動かない場合は、php.iniのallow_url_fopenの項目が以下のようになっているか確認してください。
allow_url_fopen = On
file_get_contentsの応用
file_get_contentsメソッドはHTMLをゲットする事しかできない訳ではありません。
次は、stream_context_createメソッドを使ってPOST送信をしてみます。
stream_context_createメソッドのマニュアルを見てみると、「ストリームコンテキストを作成する」とだけ記載されています。
このストリームコンテキストを操作する事で、POST送信できるようになります。
<?php $data = [ 'title' => '送信テスト', 'body' => 'テスト', ]; $opts = [ 'http' => [ 'method' => 'POST', 'header' => implode("\r\n", [ "User-Agent: hogehoge", "Accept-Language: ja", "Cookie: test=hoge", ]), ], 'data' => http_build_query($data) ]; $ctx = stream_context_create($opts); $response = file_get_contents('http://example.com/inquiry', false, $ctx);
POST送信したいデータはhttp_build_queryでURLエンコードとクエリ文字列変換を事前にしておきます。
JSONデータの場合は、json_encodeメソッドを通した後、urlencodeメソッドでURLエンコードする感じです。
file_get_contentsの真価
ストリームコンテキストでヘッダ情報を作れるので、先の例でも示しましたが、Cookieも思い通り!
Basic認証の突破や、セッションを使ったサイトの巡回などもできます。
また、Chatwork APIのようなヘッダ情報にAPI KEYを埋め込むタイプのAPIにも対応できます。
SSL通信を行いたい場合も特に考える必要はなく、プロトコルに 「https://」を指定するだけです。
また、これが言いたいがためにこのブログを書いた訳なのですが
file_get_contentsは、php-curlがインストールされていない環境でも動作するため、curlライブラリの代替処理としても使えます。
(もちろん、curlの方が高機能なのは言うまでもありません)
以上です。