- - PR -
URLにIDとパスワード指定
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-08-06 11:40
いつも利用させていただいています。
現在、ある認証機能付きのページをアクセスするときに、URL中にユーザidとパスワードを含めてhttpのgetを実行したいのですが、下記のようなエラーになります。 ★エラー java.io.IOException: Server returned HTTP response code: 401 for URL:http://USERxx:PASSyy@www.testsite/〜 エラーの内容はそのリソースは認証を受けなければならないというものだと思います。 これは、サーバ側の設定の問題なのでしょうか?それともこのようなURLを送信する場合は他の方法をとるべきなのでしょうか? javaのコードは単純なもので、GETしたHTMLをlogファイルに書くというものです。 ★コード public void doGet(String inurl) throws Exception, IOException { url = inurl; URL urlObj; HttpURLConnection urlCon; BufferedReader urlIn; String str; // URLオブジェクトの作成 urlObj = new URL(url); // URL接続 urlCon = (HttpURLConnection) urlObj.openConnection(); urlCon.setRequestMethod("GET"); urlIn = new BufferedReader(new InputStreamReader(urlCon .getInputStream())); // HTMLソースの表示 logger.log(Level.INFO, inurl); while ((str = urlIn.readLine()) != null) { logger.log(Level.INFO, str); } // URL切断 urlIn.close(); urlCon.disconnect(); } どなたかわかる方回答よろしくお願いいたします。 | ||||
|
投稿日時: 2004-08-06 12:48
Basic認証でアクセス制限されたサイトにアクセスするときの流れは、
通常次のようになります。 1. ユーザーがクライアント(IE等のWebブラウザ)に目的のURLを入力する。 2. クライアントが、Authorization: ヘッダを付加しないで、 目的のコンテンツにアクセスする。 3. サーバーは、401 Authorization Required のレスポンスを返して、 クライアントに認証が必要である旨を伝える。 4. クライアントがユーザーに ID/PW の入力を求める (IE等のブラウザが、ポップアップウインドウを出して、 ID/PW の入力をユーザーに求めるアレです。) 5. ユーザーが ID/PW を入力する。 6. クライアントが、Authorization: ヘッダに ID/PW の情報を付加 して目的のコンテンツに再度アクセスする。 7. サーバが ID/PW を解析して、認証OKであればコンテンツをクライ アントに返す。 8. クライアントがコンテンツを表示して、ユーザーがそれを閲覧する。 このような感じが仕様になっています。 ネットワークをキャプチャすると一目瞭然です。 ではどうすればいいかですが ConnectionのsetRequestPropertyを使って AuthorizationをキーにしてUSERxx:PASSyyをBase64の値でセットして アクセスすれば認証通るとおもいます。 一応どのような値がAuthorizationにセットされているか キャプチャして見ることをお勧めします。 | ||||
|
投稿日時: 2004-08-06 13:14
ブラウザが IE だと仮定して、
http://username:password@www.example.com 形式は使用できなくなったという記憶がありますが、関係あります? | ||||
|
投稿日時: 2004-08-06 13:33
いっきゅうさん、回答ありがとうございます。
Authorizationヘッダーについて調査したらいろいろ情報がありますね。 とても参考になりました。 Base64値に変換する方法を調査中ですが、どうやら作りこむ必要があるみたいです。 | ||||
|
投稿日時: 2004-08-06 13:37
顔爺さん、こんにちは。
ブラウザはIEですが、サーブレットからURLを発行しようとしていますので、おそらく関係ないと思われます。説明不足ですみません。 | ||||
|
投稿日時: 2004-08-06 13:47
自己レスです。
jakartaプロジェクトのcommonsライブラリを使って、Base64エンコードができそうです。 commons-codec-1.3.jar | ||||
|
投稿日時: 2004-08-06 14:06
(勘違いのため削除) [ メッセージ編集済み 編集者: Cluster 編集日時 2004-08-06 14:08 ] | ||||
|
投稿日時: 2004-08-06 14:45
<補足>
Tomcat5.5でテストした結果ですが
こんな感じにRefererのセットと AuthorizationにはBasic認証を示す必要があります。 ちなみにDigest認証も同じような方法でできました、、 (Authorizationの値が複雑ですが、、) | ||||
