Re: [J2SE] 對網頁做登入讀取資訊
※ 引述《Gitangan (周大貓)》之銘言:
: 求解,看了一個下午,眼睛都快花掉了@@"
: 謝謝大家花時間看我的問題。
這個問題實在是有點棘手,你其實問了三個以上得問題。
除非你是用類似vb的webbrower的控件,
否則你不要太先入為用模擬使用者操作的觀念去想,
從web 傳輸模式的方向去想會比較好下手。
你要解決問題的順序如下
1.解析原本網頁登入的Form (我應該要傳值給誰、傳什麼)
原則上form 都會有action 跟 method
還有要input 的name
比方說以這個例子
<form id="form1" action="result.jsp" method="post">
<input type="checkbox" name="hello" value="hi" />
</form>
從這裡我們可以知道這個form是要傳給result.jsp
方法是post (沒寫就是get)
參數名稱是 hello ,值是hi
2.按照指定方法傳送資料給目標頁面
你可以參考httpclient的說明文件,也可以自己寫。
手邊之前寫的httpcleint 做的web spider,
在公司不在手上,你就自己再多摸索一下吧。
─────────────────────────
自己寫的話,基本上跟抓網頁一樣,只是在網址上附加點資訊給他。
ex. result.jsp?hello=hi (這是method是get狀況的處理法)
post則比較麻煩,底下有sample code。
HttpURLConnection huConn = (HttpURLConnection) url.openConnection();
huConn.setRequestMethod("POST");
huConn.setRequestProperty("Content-type",
"application/x-www-form-urlencoded");
huConn.setDoOutput(true);
PrintWriter out = new PrintWriter(huConn.getOutputStream());
out.print("hello");
out.print('=');
out.print(URLEncoder.encode("hi", "UTF-8"));
out.flush();
out.close();
BufferedReader input = new BufferedReader(
new InputStreamReader(huConn.getInputStream(), charset));
//讀取...
3.登入後抓取新網頁要保有 session 狀態
你所謂的有cookie的頁面,其實那個cookie就是session id,
用來讓server了解你是哪一個登入者的機制,
如果你是用httpclient 這部份他會幫你處理。
httpclient是第三方套件,不是sun提供的,
如果你繼續在Java這條路上寫久一點,會發現其實這種第三方套件很多。
ex. JMail , JExcel ...etc
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 語 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼 *◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂~telnet://tony1223.no-ip.info
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68
※ 編輯: TonyQ 來自: 220.134.27.68 (03/31 12:06)
※ 編輯: TonyQ 來自: 220.134.27.68 (03/31 12:14)
推
03/31 12:57, , 1F
03/31 12:57, 1F
推
03/31 23:08, , 2F
03/31 23:08, 2F
→
03/31 23:10, , 3F
03/31 23:10, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):