- - PR -
サイトのログインページにID,パスワードを送ってソースを取得
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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です。よろしくお願いします。 | ||||
|
投稿日時: 2006-11-14 11:00
ブラウザを使ってアクセスした場合と、プログラムをつかってアクセスした場合でリクエスト・レスポンスにどのような違いがあるか比べてみてはいかがでしょうか。
http://www.atmarkit.co.jp/fjava/javatips/113jakarta020.html | ||||
|
投稿日時: 2006-11-14 11:48
ユーザIDパスワード送出の前に、ログイン画面のソースを取得したほうが良いように
思います。 | ||||
|
投稿日時: 2006-11-14 12:10
インギさんありがとうございます。
axis-1_4をインストールし、教えてもらったURLの通りに設定してブラウザから http://localhost:1234/にアクセスしたのですがエラー画面が表示されます。 TCPモニタにはjava.net.UnknownHostExceptionと出ていました。 Tomcatを止めても駄目でした。使い方をもう少し調べてみます。 ひらさん ログイン画面のソース取得→ID,パスワード送信→ソースの取得という事でしょうか? ありがとうございます。やってみます。 | ||||
|
投稿日時: 2006-11-14 12:32
試してないけど。
OutputStream取得→id, pass書き込み→connect→OutputStreamをclose→InputStream取得… とか。 | ||||
|
投稿日時: 2006-11-14 13:25
そんな順番です。 同じような(というか、ソースコードほぼ同じ)プログラムを作ったことがあります。 一度、欲がでてくると、今度は次の画面とか、条件分岐とかやりたくなってきますね。 やりだすと、とてつもなくややこしいのですけど。 | ||||
|
投稿日時: 2006-11-14 13:37
私も似たようなことをしたことがあります。 ついにはHTMLパーサを持ち出して分岐する羽目になったわけですが。 | ||||
|
投稿日時: 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); } |