PHP:file_get_contentsでBasic認証する

こんにちは、さるまりんです。

Basic認証が必要な場所からデータを取得する機会がありました。

認証情報なしで単純にアクセスするともちろん認証エラーとなります。

PHPのプログラムでアクセスする場合でも当然これを越えなければなりません。

今回はそのやり方についてです。

URLに直接埋め込む

例えば
URLがhttp://salumarine.com/secret/naisho/
IDがsalumarine
パスワードがhimitsunokotoba
だったとしましょう。

(注:そんなもんないのでアクセスしないでくださいね。)

その場合、次のURL

http://salumarine:himitsunokotoba@salumarine.com/secret/naisho/

これで直接アクセスできてしまったりします。

以下の形式です。

http://[ユーザー名]:[パスワード]@[ドメイン]/[パス]

でも、パスワードとかそのまま書くの嫌じゃないですか?

Basic認証のheaderを送信する

続きますが、やっぱり、嫌ですよね。

URLにそのまま読めてしまうパスワードがあるって不安です。

なのでheaderとして送信します。

define('SALU_ID', 'salumarine'); // IDです
define('SALU_PW', 'himitsunokotoba'); // パスワードです
define('URL', 'http://salumarine.com/secret/naisho/');

$opts = [
    'http' => [
        'method' => 'GET',
        'header' => 'Authorization: Basic ' . base64_encode(SALU_ID . ':' . SALU_PW)
    ]
];

$data = file_get_contents(URL, false, stream_context_create($opts));

(注:そんなもんないのでアクセスしないでくださいね。)

この方法ならURLにID・パスワードを書く必要はありません。

定数としてまとめて定義しているものを読み込めば同じファイルに書く必要もありませんね。

簡単なもので、外に絶対でないものであればURLに直接埋め込むのもアリかと思いますが、こちらの方がやっぱり安心です。

読んでくださってありがとうございます。

ではまた!