tambc
BlogJava
首页
新随笔
联系
聚合
管理
5 Posts :: 21 Stories :: 5 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔档案
2007年2月 (2)
2006年12月 (3)
文章分类
Ajax
C#(1)
Delphi(3)
Hibernate(1)
Java(14)
JavaScript(7)
Oracle
Spring
SQLServer(1)
Struts
全文检索(3)
工作流学习
文章档案
2007年2月 (1)
2007年1月 (1)
2006年12月 (16)
搜索
最新评论
1. re: textarea控制字符数
收益匪浅
--ljh
2. re: textarea控制字符数
评论内容较长,点击标题查看
--fdsa
3. re: 免费部署 与同时访问此网页的网友聊天[未登录]
股票
--秋风
4. re: 实现HTTP长连接(服务器推)
yao lianjie
--张伟
5. re: 近来使用velocity来生成网站静态页面
re: 近来使用velocity来生成网站静态页面的地址
--gv
阅读排行榜
1. 近来使用velocity来生成网站静态页面(1380)
2. 转:基于Java的开源 Carrot2 搜索结果聚合聚类引擎 2.0(688)
3. 使用C3P0时一个怪异的事情(462)
4. 用JS让查看源代码时什么也看不到(402)
5. 免费部署 与同时访问此网页的网友聊天(305)
评论排行榜
1. 免费部署 与同时访问此网页的网友聊天(1)
2. 近来使用velocity来生成网站静态页面(1)
3. 用JS让查看源代码时什么也看不到(0)
4. 转:基于Java的开源 Carrot2 搜索结果聚合聚类引擎 2.0(0)
5. 使用C3P0时一个怪异的事情(0)
HttpClient和HtmlParser配合实现自动登陆系统抽取页面信息
/**/
/*
* Main.java
*
* Created on 2007年1月19日, 上午9:14
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package
wapproxy;
import
org.apache.commons.httpclient.
*
;
import
org.apache.commons.httpclient.methods.
*
;
import
org.apache.commons.httpclient.params.HttpMethodParams;
import
java.io.
*
;
import
org.htmlparser.Node;
import
org.htmlparser.NodeFilter;
import
org.htmlparser.Parser;
import
org.htmlparser.filters.TagNameFilter;
import
org.htmlparser.tags.
*
;
import
org.htmlparser.util.NodeList;
import
org.htmlparser.util.ParserException;
/** */
/**
*
*
@author
xcz
*/
public
class
Main
{
/** */
/**
Creates a new instance of Main
*/
public
Main()
{
}
/** */
/**
*
@param
args the command line arguments
*/
public
static
void
main(String[] args)
throws
Exception
{
//
Create an instance of HttpClient.
HttpClient client
=
new
HttpClient();
//
Create a method instance.
PostMethod post_method
=
new
PostMethod(
"
http://localhost/rcpq/
"
);
NameValuePair[] data
=
{
new
NameValuePair(
"
username
"
,
"
admin
"
),
new
NameValuePair(
"
password
"
,
"
admin
"
),
new
NameValuePair(
"
dologin
"
,
"
1
"
),
}
;
post_method.setRequestBody(data);
try
{
//
Execute the method.
int
statusCode
=
client.executeMethod(post_method);
if
(statusCode
!=
HttpStatus.SC_OK)
{
System.err.println(
"
Method failed:
"
+
post_method.getStatusLine());
}
//
Read the response body.
//
byte[] responseBody = post_method.getResponseBody();
//
Deal with the response.
//
Use caution: ensure correct character encoding and is not binary data
//
System.out.println(new String(responseBody));
}
catch
(HttpException e)
{
System.err.println(
"
Fatal protocol violation:
"
+
e.getMessage());
e.printStackTrace();
}
catch
(IOException e)
{
System.err.println(
"
Fatal transport error:
"
+
e.getMessage());
e.printStackTrace();
}
finally
{
//
Release the connection.
post_method.releaseConnection();
}
byte
[] responseBody
=
null
;
GetMethod get_method
=
new
GetMethod(
"
http://localhost/rcpq/unit.php
"
);
//
Provide custom retry handler is necessary
get_method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new
DefaultHttpMethodRetryHandler(
3
,
false
));
try
{
//
Execute the method.
int
statusCode
=
client.executeMethod(get_method);
if
(statusCode
!=
HttpStatus.SC_OK)
{
System.err.println(
"
Method failed:
"
+
get_method.getStatusLine());
}
//
Read the response body.
//
responseBody = get_method.getResponseBody();
//
这里用流来读页面
InputStream in
=
get_method.getResponseBodyAsStream();
if
(in
!=
null
)
{
byte
[] tmp
=
new
byte
[
4096
];
int
bytesRead
=
0
;
ByteArrayOutputStream buffer
=
new
ByteArrayOutputStream(
1024
);
while
((bytesRead
=
in.read(tmp))
!=
-
1
)
{
buffer.write(tmp,
0
, bytesRead);
}
responseBody
=
buffer.toByteArray();
}
//
Deal with the response.
//
Use caution: ensure correct character encoding and is not binary data
//
System.out.println(new String(responseBody));
}
catch
(HttpException e)
{
System.err.println(
"
Fatal protocol violation:
"
+
e.getMessage());
e.printStackTrace();
}
catch
(IOException e)
{
System.err.println(
"
Fatal transport error:
"
+
e.getMessage());
e.printStackTrace();
}
finally
{
//
Release the connection.
get_method.releaseConnection();
}
Parser parser;
parser
=
Parser.createParser(
new
String(responseBody,
"
GBK
"
),
"
GBK
"
);
String filterStr
=
"
table
"
;
NodeFilter filter
=
new
TagNameFilter(filterStr);
NodeList tables
=
parser.extractAllNodesThatMatch(filter);
//
System.out.println(tables.elementAt(17).toString());
//
找到单位列表所在的表格
TableTag tabletag
=
(TableTag) tables.elementAt(
17
);
TableRow row
=
tabletag.getRow(
3
);
TableColumn[] cols
=
row.getColumns();
//
System.out.println("单位名称:" + cols[2].toHtml());
System.out.println(
"
单位名称:
"
+
cols[
2
].childAt(
0
).getText());
}
}
转自:
http://blog.csdn.net/danny_xcz/archive/2007/01/19/1487602.aspx
posted on 2007-01-22 13:42
tambc
阅读(780)
评论(0)
编辑
收藏
所属分类:
Java
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
HttpClient和HtmlParser配合实现自动登陆系统抽取页面信息
Acegi+hibernate 动态实现基于角色的权限管理
服务器是怎么要求客户端强行弹出身份验证窗口的
java的ubb类
java版的escape和unescape
用java实现汉字的笔画数(转贴)
用Yale CAS Server 来实现单点登陆(SSO)
实现HTTP长连接(服务器推)
Powered by:
BlogJava
Copyright © tambc