PHP で、ダイジェスト認証(Digest Auth)をする HTTP クライアント

PHP で、ダイジェスト認証(RFC2617)付きのサイトにアクセスするにはどうしたらいいのだろう?

まずは PHP で、Perl でいうところの LWP::UserAgent に相当するものはないのだろうか?と探していたところ、あった。CURL というのがそれで、libcurl パッケージをインストールしておく必要があるとのこと。私は、Fedora Core 6 を使っているのだが、Fedora Core 6 をインストールしたときに開発パッケージをなんでもかんでも入れておいたので特に何もする必要はなかった(苦笑)。

とにかくまずは CURL が PHP で動けば、あとはプロトコルとして HTTP、HTTPS(SSL/TLS)、FTP、Telnet、LDAP プロトコルでアクセスするクライアントを作れるようだ。

CURL では HTTP だと、GET、POST、PUT、FTP アップロード、フォームからのアップロード、Proxy、cookie、ユーザ名とパスワードによる基本認証/ダイジェスト認証、HTTP(または HTTPS)の認証…と、フルサポートするようだ。

以下は、「PHP からDigest 認証付きのサイトにユーザー名とパスワードを認証して送信してアクセスする HTTP クライアント」の例。サーバ側の処理はググったらたくさん出てきたけど、PHP での HTTP クライアントはあまり例がなかった。

<?php // アクセスする URL $url = 'https://yourdomain.com/xxx...'; // // 認証されるユーザー名 $username = 'ここにユーザー名を書く'; // 認証パスワード $password = 'ここにパスワードを書く'; // 初期化 $ch = curl_init(); // オプションとして CURLAUTH_ANY / CURLAUTH_BASIC / CURLAUTH_DIGEST の中から選択 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); // ユーザー名とパスワードを指定 curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); // アクセスする URL を設定 curl_setopt($ch, CURLOPT_URL, $url); // curl_exec を実行したときに戻り値として成功(TRUE)/失敗(FALSE)ではなく、HTMLなどの値(文字列)を返すようにする curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // サイトにアクセスする $data = curl_exec($ch); // 結果を表示する print $data; // 接続を閉じる curl_close($ch); ?>

Comments