- PR -

サイトのログインページにID,パスワードを送ってソースを取得

投稿者投稿内容
@@
会議室デビュー日: 2006/11/13
投稿数: 4
投稿日時: 2006-11-14 10:44
初めて書き込みします。
javaプログラムからWebサイトのログインページにアクセスしてID,とパスワードを送信する。
その後ログインした先の画面のソースを取得する。
という事をしたいのですが、ログイン画面のソースしか取得できません。
原因がわかりませんので何か参考となるURLや必要な処理等教えていただけないでしょうか。
プログラムの一部を載せて起きます。

// ログイン画面を指定
URI uri = new URI("https://login.・・・・・");
uri = uri.normalize();
URL url = uri.toURL();

HttpsURLConnection uc = (HttpsURLConnection)url.openConnection();

// 出力用設定
uc.setRequestMethod("POST");
uc.setDoOutput(true); // 入出力設定 入力:false, 出力:true
uc.setUseCaches(false); // キャッシュの古いデータを読み込まない
uc.connect();

// 出力処理
PrintWriter out = new PrintWriter(uc.getOutputStream());// 出力ストリームを取得
out.write("login=XXXXXX&passwd=YYYYYYY"); // IDとパスワードを送信する
out.flush();
out.close();

BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream(),code));
/***** ↓ソースを取得する↓ *****/
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
/****************************************/

バージョンは1.4.2_10です。よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-11-14 11:00
ブラウザを使ってアクセスした場合と、プログラムをつかってアクセスした場合でリクエスト・レスポンスにどのような違いがあるか比べてみてはいかがでしょうか。
http://www.atmarkit.co.jp/fjava/javatips/113jakarta020.html
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2006-11-14 11:48
ユーザIDパスワード送出の前に、ログイン画面のソースを取得したほうが良いように
思います。
@@
会議室デビュー日: 2006/11/13
投稿数: 4
投稿日時: 2006-11-14 12:10
インギさんありがとうございます。
axis-1_4をインストールし、教えてもらったURLの通りに設定してブラウザから
http://localhost:1234/にアクセスしたのですがエラー画面が表示されます。
TCPモニタにはjava.net.UnknownHostExceptionと出ていました。
Tomcatを止めても駄目でした。使い方をもう少し調べてみます。

ひらさん
ログイン画面のソース取得→ID,パスワード送信→ソースの取得という事でしょうか?
ありがとうございます。やってみます。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-11-14 12:32
試してないけど。
OutputStream取得→id, pass書き込み→connect→OutputStreamをclose→InputStream取得…
とか。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2006-11-14 13:25
引用:

@@さんの書き込み (2006-11-14 12:10) より:
ログイン画面のソース取得→ID,パスワード送信→ソースの取得という事でしょうか?


そんな順番です。
同じような(というか、ソースコードほぼ同じ)プログラムを作ったことがあります。
一度、欲がでてくると、今度は次の画面とか、条件分岐とかやりたくなってきますね。
やりだすと、とてつもなくややこしいのですけど。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-11-14 13:37
引用:

ひらさんの書き込み (2006-11-14 13:25) より:
同じような(というか、ソースコードほぼ同じ)プログラムを作ったことがあります。
一度、欲がでてくると、今度は次の画面とか、条件分岐とかやりたくなってきますね。
やりだすと、とてつもなくややこしいのですけど。



私も似たようなことをしたことがあります。
ついにはHTMLパーサを持ち出して分岐する羽目になったわけですが。
@@
会議室デビュー日: 2006/11/13
投稿数: 4
投稿日時: 2006-11-14 14:38
mioさん、ひらさんご意見ありがとうございます。
早速参考にしてプログラムを修正したのですがうまくいきません。
状況ですが、まずログイン前のソースが表示された後に、直接ログイン後のURLを入力した時のエラーページのソースが表示されました。見当違いの事をしているのでしょうか。度々すみませんがよろしくお願いします。
修正ソース一部を載せます。

/*** ログイン画面 ***/
URI uri = new URI(ログイン前URL);
uri = uri.normalize();
URL url = uri.toURL();
HttpsURLConnection uc = (HttpsURLConnection)url.openConnection();

uc.setRequestMethod("POST");// POST指定
uc.setDoOutput(true);// 入出力設定 入力:false, 出力:true
uc.setUseCaches(false);// キャッシュの古いデータを読み込まない
uc.connect();
PrintWriter out = new PrintWriter(uc.getOutputStream());// 出力ストリームを取得

br = new BufferedReader(new InputStreamReader(uc.getInputStream(),code));

/***** ↓ソース全てを取得する *****/
String line1;
while ((line1 = br.readLine()) != null) {
System.out.println(line1);
}
/****************************************/
// パスワード送信 ++++++++++++++++++++
out.print(postData);
out.flush();
out.close();
//++++++++++++++++++++++++++++++++++++

/**** ログイン後 ***/
URI uri2 = new URI(ログイン後のURL);
uri2 = uri2.normalize();
URL url2 = uri2.toURL();
HttpsURLConnection uc2 = (HttpsURLConnection)url2.openConnection();

br = new BufferedReader(new InputStreamReader(uc2.getInputStream(),code));

/***** ↓ソース全てを取得する *****/
String line2;
while ((line2 = br.readLine()) != null) {
System.out.println(line2);
}

スキルアップ/キャリアアップ(JOB@IT)