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/29 11:08:58
  • 終了:2009/07/31 02:39:51

ベストアンサー

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/07/30 08:50:45

ポイント35pt

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

いいえ。

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


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

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


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

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

id:dedara

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

2009/07/31 02:39:18

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/07/29 13:05:50

ポイント35pt

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


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


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

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

id:dedara

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

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

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

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

pahoo回答回数5960ベストアンサー獲得回数6332009/07/30 08:50:45ここでベストアンサー

ポイント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
    それから、該当ファイル分全部ということは画面遷移するたびにリクエストが必用なんでしょうか

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません