この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
目次
phpで外部サイトの情報を収集する
phpにて外部のサイトにアクセスして処理したり、情報を収集したいときがあります。
なかでもbasic認証を設定しているサイトにアクセスする方法を確認しましたので
- file_get_contents
- curl
の2つを紹介します。
file_get_contents関数
httpリクエストで情報を収集する際によく利用するのがfile_get_contentsという関数だと思います。
<?php $url = "https://example.com/"; $output = file_get_contents($url); var_dump($output);
urlを与えるだけで該当のデータを取得することができます。
file_get_contentsのメリットは簡単に利用することができることで、デメリットはカスタマイズ(リクエスト方法の調整やリクエストヘッダーの改変)したアクセスが難しいことです。
curl関数
<?php $url = "https://example.com/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); curl_close($ch); var_dump($output);
curlのメリットはリクエスト方法や、パラメータの調整などリクエストに関する設定が細かくできることです。デメリットはプログラムの記入量が増え、設定項目が増えるため簡易には使用しにくいことです。
ただ簡単に利用しにくい以外の欠点がないため、ある一定規模の開発になるとほぼcurl関数が利用されます。
basic認証を設定されたサイトにアクセスする
基本的な使い方は記載しましたが、応用としてbasic認証を設定しているサイトにアクセスする方法も記載します。
file_get_contentsサンプル
basic認証を設定された瞬間にfile_get_contentsを利用する場合は工夫が必要になります。
<?php
/**
* Basic認証ありのサイトへアクセス
*/
$url = 'https://example.com/auth_basic/test';
$USERNAME = "*********";
$PASSWORD = "*********";
$auth = array(
'Authorization: Basic ' . base64_encode($USERNAME . ':' . $PASSWORD)
);
$options = array(
'http' => array(
'header' => implode("\r\n", $auth)
)
);
$output = file_get_contents($url, false, stream_context_create($options));
//出力結果の表示
var_dump($output);
curlサンプル
<?php /** * Basic認証ありのサイトへアクセス */ $url = 'https://example.com/auth_basic/test'; $USERNAME = "*********"; $PASSWORD = "*********"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, $USERNAME . ":" . $PASSWORD); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); $output = curl_exec($ch); curl_close($ch); //出力結果の表示 var_dump($output);
まとめ
いかがでしたでしょうか。
今回は通常の通信とbasic認証の通信を紹介しました。
個人的には簡単なツール、または検証用のプログラムを作成するなfile_get_contents。ある一定規模の開発や特殊なリクエストを行う場合は、curlを利用しています。
file_get_contentsとcurlはほぼ同じ機能を保有する命令ですが、特徴が異なりますので状況に合わせて使い分けてみて下さい。


