使用Jsoup作为简单的http客户端

来源:互联网 发布:淘宝刷评论 编辑:程序博客网 时间:2024/05/21 09:12

jsoup官网:http://jsoup.org/

下载地址:http://jsoup.org/download

中文文档:http://www.open-open.com/jsoup/


Jsoup主要作为html解析器来使用,简单易用。同时,它也可以充当简单的http客户端,代码如下:

Document doc = Jsoup.connect("http://example.com/").get();

Document doc = Jsoup.connect("http://example.com")  .data("query", "Java")  .userAgent("Mozilla")  .cookie("auth", "token")  .timeout(3000)  .post();

以上两段代码摘自Jsoup官方文档。

关于使用Jsoup访问url,Jsoup官方只给出这么两段代码。


实际上,使用Jsoup作为http客户端的功能不止上面提到的这些,只是在官方文档中没有写。

下面是我在用Jsoup访问网页时遇到的几个问题以及解决方案。


1、从网页中得到cookie用于下次url访问:

</pre><pre name="code" class="java">//用Connection接口的execute方法//得到org.jsoup.Connection.Response对象Response resp = Jsoup.connect("login url").data("username", "subi").data("password", "123456").method(Method.POST).execute();//通过Response对象的body()方法得到页面用于解析,判断是否登录成功String loginResult = resp.body();//获得cookiesMap<String, String> cookies = resp.cookies();//用获取到的cookie访问页面Jsoup.connect("url").cookies(cookies).get();

2、提交参数时需要指定一种特定的编码方式:
我读了部分Jsoup的源代码,发现了jsoup的一个设计缺陷:只能以默认编码方式(UTF-8)提交参数。
(分析Jsoup源码的过程就不在这里展示了,如果有人对此感兴趣并且遇到问题可以直接回复这篇文章)
也许是因为Jsoup本身就不是作为http客户端而设计的吧,毕竟它的重点是文档解析。
但是我又不想为此放弃Jsoup简洁的API,于是采用了一种不应该被效仿的做法:自己改Jsoup,重新打包。


我的解决方案:
对jsoup稍加修改,添加以不同编码方式提交url参数的API。
基于目前最新的版本——jsoup-1.7.3修改,不改变jsoup官方原有的API。
所做的改动其实就是给Connection接口的get、post和execute三个方法分别添加了一个重载方法,供用户传入编码方式。并在其唯一的实现类HttpConnection中添加了相应的实现。


经过修改的jar包可在http://download.csdn.net/detail/u010182075/7703543下载。


使用示例:

Jsoup.connect("url").get("gbk");Jsoup.connect("url").post("gb2312");Jsoup.connect("url").execute("gb2312");




0 0
原创粉丝点击