Re: [J2SE] 對網頁做登入讀取資訊

看板java作者 (骨頭)時間16年前 (2008/03/31 12:06), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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
好詳細 用get的話我真的都沒想到後面的網址…只是我要抓
03/31 23:08, 2F

03/31 23:10, , 3F
的是post的@@" 我再try一下 謝謝tonyq 大大
03/31 23:10, 3F
文章代碼(AID): #17y6C-rr (java)
文章代碼(AID): #17y6C-rr (java)