【php】ベーシック認証のかかっているWebページの内容を file_get_contents()で取得する
問題
あるWebページの内容を file?get_contents()関数で取得したいのですが、ベーシック認証がかかってました。
どうやって取得したらよいでしょうか。
答え
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);
コメント