PHPのダイジェスト認証の処理(クライアントサイド)


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人5回まで
  • 登録:
  • 終了:2009/07/31 02:39:51
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント35pt

それぞれバッファに退避しておいて出力時に1つのファイルとしてブラウザに読み込ませればOKということでしょうか。

いいえ。

ブラウザによって外部参照の処理は異なります。単純にデータを渡すだけでは実現できません。


ダイジェスト認証を通った後の画面をブラウザと同じように表示させたいのであれば、PHPでブラウザを作る必要があります。

しかし、PHPの機能だけで実装することは難しいのではないでしょうか。残念ながら、私は見たことがありません。


ダイジェスト認証を自動(半自動)で通すのが目的であれば、ブラウザの機能を使ったり、パスワード管理ソフトを併用したり、またはOSなどの自動化処理を使う方が手っ取り早いと思います。

ここではOSやブラウザの種類やバージョンも分からないので、お答えすることはできませんが。

id:dedara

ありがとうございます。手段をいろいろ検討したいと思います。

2009/07/31 02:39:18

その他の回答1件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント35pt

おそらく、外部参照になっているからです。


PHPを介して読み取れるHTMLコンテンツを見ないと何とも言えませんが、おそらく、JavaScriptとCSSは外部から読み取る形式(外部参照)になっているのでしょう。フレームは明らかに外部参照です。


ブラウザは、読み込んだHTMLコンテンツを解析し、外部参照のファイルがあれば、それを別途読み込んでいます。

PHPを介して読み込むプログラムでも同様に、HTMLコンテンツを解析し、外部参照のファイルがあれば、それを別途読み込む必要があります。

id:dedara

HTMLを解析して別途外部ファイルを読み込む必要があるのはわかりましたが、

それぞれバッファに退避しておいて出力時に1つのファイルとしてブラウザに読み込ませればOKということでしょうか。

1つのファイルとしてブラウザに読み込ませる方法がちょっと思いつかないのですが、そのあたりも何かヒントをいただけないでしょうか

2009/07/30 00:04:41
id:pahoo No.2

回答回数5960ベストアンサー獲得回数633ここでベストアンサー

ポイント35pt

それぞれバッファに退避しておいて出力時に1つのファイルとしてブラウザに読み込ませればOKということでしょうか。

いいえ。

ブラウザによって外部参照の処理は異なります。単純にデータを渡すだけでは実現できません。


ダイジェスト認証を通った後の画面をブラウザと同じように表示させたいのであれば、PHPでブラウザを作る必要があります。

しかし、PHPの機能だけで実装することは難しいのではないでしょうか。残念ながら、私は見たことがありません。


ダイジェスト認証を自動(半自動)で通すのが目的であれば、ブラウザの機能を使ったり、パスワード管理ソフトを併用したり、またはOSなどの自動化処理を使う方が手っ取り早いと思います。

ここではOSやブラウザの種類やバージョンも分からないので、お答えすることはできませんが。

id:dedara

ありがとうございます。手段をいろいろ検討したいと思います。

2009/07/31 02:39:18
  • id:b-wind
    >なぜかCSS、Javascript、フレーム内のHTMLなどが読み込めず
    それはちゃんと該当するファイル分のリクエストを発行した上での結果?
    それとも一回の実行で関連するすべてのファイルを取ってきて欲しいということ?

    あなたの実行したコードが分からないので何が問題かを判断するのは非常に難しい。
    一部でもコードを提示することは出来ないか?
  • id:dedara
    <?php

    // アクセスする 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);

    ?>

    コードは上記のとおりです。該当ファイルすべてにリクエストを発行するというのは具体的にどういう書き方をしたら良いのでしょうか。とくにそのあたりのことは意識していませんでした…。
  • id:dedara
    それから、該当ファイル分全部ということは画面遷移するたびにリクエストが必用なんでしょうか

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません