作者TonyQ (骨头)
看板java
标题Re: [J2SE] 对网页做登入读取资讯
时间Mon Mar 31 12:06:20 2008
※ 引述《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)
1F:推 huge:相当有帮助 03/31 12:57
2F:推 Gitangan:好详细 用get的话我真的都没想到後面的网址…只是我要抓 03/31 23:08
3F:→ Gitangan:的是post的@@" 我再try一下 谢谢tonyq 大大 03/31 23:10