【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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の方が高機能なのは言うまでもありません)

 
以上です。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
1
読み込み中...
1 票, 平均: 1.00 / 11
14,323
X facebook はてなブックマーク pocket
【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

萬代陽一

ソーシャルゲームのウェブ API などの開発がメイン業務ですが、ありがたいことにマーケティングなどいろんな仕事をさせてもらえています。
なおビヨンド内での私の肖像権は CC0 扱いになっています。