http://perltips.twinkle.cc/php/digest_auth_http_client.php
http://labs.uechoco.com/blog/2008/09/phpcurlでダイジェスト認証digest-authを通過する.html
上記URLを参考にしてPHPプログラム内にアカウント情報を記述して、ダイジェスト認証にログインできるクライアントを作ることができました。しかし、なぜかCSS、Javascript、フレーム内のHTMLなどが読み込めず、本体
HTMLしか読めません。ふつうにブラウザからアクセスしてダイジェスト認証の入力を行うと、すべて表示されます。なぜでしょうか
それぞれバッファに退避しておいて出力時に1つのファイルとしてブラウザに読み込ませればOKということでしょうか。
いいえ。
ブラウザによって外部参照の処理は異なります。単純にデータを渡すだけでは実現できません。
ダイジェスト認証を通った後の画面をブラウザと同じように表示させたいのであれば、PHPでブラウザを作る必要があります。
しかし、PHPの機能だけで実装することは難しいのではないでしょうか。残念ながら、私は見たことがありません。
ダイジェスト認証を自動(半自動)で通すのが目的であれば、ブラウザの機能を使ったり、パスワード管理ソフトを併用したり、またはOSなどの自動化処理を使う方が手っ取り早いと思います。
ここではOSやブラウザの種類やバージョンも分からないので、お答えすることはできませんが。
おそらく、外部参照になっているからです。
PHPを介して読み取れるHTMLコンテンツを見ないと何とも言えませんが、おそらく、JavaScriptとCSSは外部から読み取る形式(外部参照)になっているのでしょう。フレームは明らかに外部参照です。
ブラウザは、読み込んだHTMLコンテンツを解析し、外部参照のファイルがあれば、それを別途読み込んでいます。
PHPを介して読み込むプログラムでも同様に、HTMLコンテンツを解析し、外部参照のファイルがあれば、それを別途読み込む必要があります。
それはちゃんと該当するファイル分のリクエストを発行した上での結果?
それとも一回の実行で関連するすべてのファイルを取ってきて欲しいということ?
あなたの実行したコードが分からないので何が問題かを判断するのは非常に難しい。
一部でもコードを提示することは出来ないか?
// アクセスする URL
$url = 'https://***.com/';
// ユーザー名
$username = 'hoge';
// パスワード
$password = 'hoge';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
print $data;
curl_close($ch);
?>
コードは上記のとおりです。該当ファイルすべてにリクエストを発行するというのは具体的にどういう書き方をしたら良いのでしょうか。とくにそのあたりのことは意識していませんでした…。