SOFTELメモ

</> 技術者募集

【php】ベーシック認証のかかっているWebページの内容を file_get_contents()で取得する

問題

あるWebページの内容を file?get_contents()関数で取得したいのですが、ベーシック認証がかかってました。

どうやって取得したらよいでしょうか。

basic-auth

答え

Authorizationヘッダをリクエストに含めるとOK。

Authorizationヘッダの値は、以下の形式(ベーシック認証の仕様)。

Authorization: Basic 「base64_encode('user:password')した文字列」

ユーザー名が test、パスワードが hogehoge の場合、base64_encode(‘test:hogehoge’) = dGVzdDpob2dlaG9nZQ== なので、以下のとおり。

Authorization: Basic dGVzdDpob2dlaG9nZQ==

base64エンコードなので、逆算できますね。よく指摘されるところです。

そしてこれをfile_get_contents()するときにヘッダに含めるには、以下のように stream_context_create関数を使うとよいです。

<?php
$user = 'test';
$pass = '1234567890';

$options = array('http' => array(
		'header' => array(
				'Authorization: Basic ' . base64_encode($user . ':' . $pass),
		)
));
$context = stream_context_create($options);

$r = file_get_contents('https://example.jp/test/', $context);

関連するメモ

コメント