Basic認証を設定したページでfile_get_contents( )のエラーが出た時の解決策
Basic認証を設定したページでfile_get_contents()
を実行した際に、HTTP request failed! エラーが表示された時の解決策です。
file_get_contents()
は、設定したファイルの中身をや文字列を取得するPHP関数です。URLを設定すると、Webページを構成するHTMLソースを読み込むことができます。
$html = file_get_contents('http://sample.jp/page.html');
上記のコードでは、file_get_contents()
に設定したURLのページのHTMLが$html
に文字列で取得されます。
Basic認証を設定したページでは、上記のコードを実行すると下記のようなエラーが表示されます。
failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in ...
WebサイトのBasic認証に失敗したため、「401 Unauthorized」エラーが表示されています。
Basic認証のかかったURLにアクセスするために、Authorization
ヘッダーにユーザ名、パスワードをセットしてリクエストするコードを追記します。
$opts = array(
'http' => array(
'method' => 'GET',
'header' => 'Authorization: Basic '. base64_encode('user-id:password'),
),
);
$html = file_get_contents('https://sample.jp/page.html', false, stream_context_create($opts));
$opts
配列の中でbase64_encode('ユーザ名:パスワード')
を設定することで、Basic認証のかかったページにアクセスできるようになります。
$html
にstream_context_create($opts)
を設定してHTMLを取得できました。