使用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");
- 使用Jsoup作为简单的http客户端
- Jsoup的简单使用
- Jsoup的简单使用
- 关于Jsoup的简单使用
- curl 作为 http 客户端使用示例
- 使用jsoup做任意网站的客户端
- 简单的http客户端
- 简单的使用jsoup爬取图片
- 使用Jsoup 简单抓取页面的数据
- 关于JSoup的简单使用案
- 简单使用jsoup
- Jsoup简单使用
- 使用Poco库编写一个简单的http客户端原理
- 使用plsql作为Oracle的客户端
- 使用emacs作为mysql的客户端
- jsoup的简单介绍
- glance 使用http作为location的样式
- jsoup 简介及简单使用
- 最常见的类型
- 如何将MyEclipse6.5汉化--最简单的方式
- Charm Bracelet(01背包)
- JQuery EasyUI实现登陆小窗口
- 第一章_servlet
- 使用Jsoup作为简单的http客户端
- SQL GROUP BY
- poj1274 The Perfect Stall(二分图模板题)
- 【UVALive】2659 Sudoku 【数独】精确覆盖
- 【Sesame】用Maven管理Sesame项目
- ubuntu下自带的vi不好用
- 打魚機遥控器
- appDelegate.m中的函数说明
- xsql---Buffer too small for record data