PHPでAPI叩くなら、file_get_contentsでいいじゃない?
こんにちは。
開発チームのワイルド担当、まんだいです。
PHPのfile_get_contentsというメソッドをご存知でしょうか?
ファイルオープンの処理が簡潔に書けるため、重宝するメソッドかと思いますが、このメソッドにはファイル読み込み以外にも、簡単なウェブアクセスツールとしての使い方があります。
今日はこの辺りがどこまで使えるのか、限界を調査してみたいと思います。
file_get_contentsの基本
簡単なサンプルとして、弊社のトップページを取得するには、以下の様なソースになります。
1 2 | <?php |
これは問題ないと思います。
これがうまく動かない場合は、php.iniのallow_url_fopenの項目が以下のようになっているか確認してください。
1 | allow_url_fopen = On |
file_get_contentsの応用
file_get_contentsメソッドはHTMLをゲットする事しかできない訳ではありません。
次は、stream_context_createメソッドを使ってPOST送信をしてみます。
stream_context_createメソッドのマニュアルを見てみると、「ストリームコンテキストを作成する」とだけ記載されています。
このストリームコンテキストを操作する事で、POST送信できるようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?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 ); |
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の方が高機能なのは言うまでもありません)
以上です。