Jsoup系列学习(1)-发送get或post请求

时间:2021-09-21 23:40:56

简介

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

官网:http://www.open-open.com/jsoup/parsing-a-document.htm

1、jsoup的主要功能如下:

1. 从一个URL,文件或字符串中解析HTML;
2. 使用DOM或CSS选择器来查找、取出数据;
3. 可操作HTML元素、属性、文本;
jsoup是基于MIT协议发布的,可放心使用于商业项目。

2、jsoup包

1.所使用到的jar包:jsoup-*.jar
        <!-- jsoup包依赖 -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>

get请求

1、jsoup模拟get请求还是很简单的,这里使用它,目的就是来做接口自动化测试,代码既简洁又简单。
参数中有cookie的目的就是适合所有cookie请求,请求中有cookie的传入cookie值,没有的传入空值即可。
    public static String httpGet(String url,String cookie) throws IOException{
//获取请求连接
Connection con = Jsoup.connect(url);
//请求头设置,特别是cookie设置
con.header("Accept", "text/html, application/xhtml+xml, */*");
con.header("Content-Type", "application/x-www-form-urlencoded");
con.header("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0))");
con.header("Cookie", cookie);
//解析请求结果
Document doc=con.get();
//获取标题
System.out.println(doc.title());
     //返回内容
return doc.toString(); }

2、其中get请求参数中,还可以通过另一种方式:

        //获取请求连接
Connection conn = Jsoup.connect("http://www.cnblogs.com/zhangfei/p/");
//请求参数设置
conn.data("page","3");
//获取请求结果
Document doc = conn.get();

3、在发送请求中,我们不光只想获取响应内容,还想获取头信息或者cookie值,例如:在登陆中,我们获取登陆cookie值,那么我们可以在以后一定时间内发送请求,带上cookie值,就可以绕过登陆,不用重新登陆。

要取得cookies,必须要有个Response的对象,所以,要用execute方法,如果直接用post方面,返回的则是Document对象,但在用execute方法时,要事先调用一下method方法设定好请求方式即可。

获取get请求后指定头文件名称的值方法:

public static String httpGetHeader(String url,String cook,String header) throws IOException{
//获取请求连接
Connection con = Jsoup.connect(url);
//请求头设置,特别是cookie设置
con.header("Accept", "text/html, application/xhtml+xml, */*");
con.header("Content-Type", "application/x-www-form-urlencoded");
con.header("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0))");
con.header("Cookie", cook);
//发送请求
Response resp=con.method(Method.GET).execute();
//获取cookie名称为__bsi的值
String cookieValue = resp.cookie("__bsi");
System.out.println("cookie __bsi值: "+cookieValue);
//获取返回cookie所值
Map<String,String> cookies = resp.cookies();
System.out.println("所有cookie值: "+cookies);
//获取返回头文件值
String headerValue = resp.header(header);
System.out.println("头文件"+header+"的值:"+headerValue);
//获取所有头文件值
Map<String,String> headersOne =resp.headers();
System.out.println("所有头文件值:"+headersOne);
return headerValue; }

post请求

1、使用jsoup模拟post请求返回body:

public static String httpPost(String url,Map<String,String> map,String cookie) throws IOException{
//获取请求连接
Connection con = Jsoup.connect(url);
//遍历生成参数
if(map!=null){
for (Entry<String, String> entry : map.entrySet()) {
//添加参数
con.data(entry.getKey(), entry.getValue());
}
}
//插入cookie(头文件形式)
con.header("Cookie", cookie);
Document doc = con.post();
System.out.println(doc);
return doc.toString();
}

2、发送post请求获取cookie值获取headers与get类似:

        //发送请求
Response resp=con.method(Method.POST).execute();
//获取cookie名称为__bsi的值
String cookieValue = resp.cookie(header);
System.out.println(cookieValue);

2、源代码链接

链接:http://files.cnblogs.com/files/airsen/JsoupUtil.rar

参考

1、jsoup实现爬虫网络:http://blog.csdn.net/column/details/jsoup.html

2、Jsoup做接口测试:http://www.cnblogs.com/zhangfei/p/4359408.html

Jsoup系列学习(1)-发送get或post请求的更多相关文章

  1. &lbrack;转&rsqb;利用URLConnection来发送POST和GET请求

    URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...

  2. 在C&num;用HttpWebRequest中发送GET&sol;HTTP&sol;HTTPS请求

    通用辅助类  下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需 要获取认证信息(如Cookie),所以返回的是HttpWeb ...

  3. &lpar;转&rpar; 在C&num;用HttpWebRequest中发送GET&sol;HTTP&sol;HTTPS请求

    转自:http://blog.csdn.net/zhoufoxcn/article/details/6404236 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中 ...

  4. iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

    iOS开发网络篇—发送GET和POST请求(使用NSURLSession) 说明: 1)该文主要介绍如何使用NSURLSession来发送GET请求和POST请求 2)本文将不再讲解NSURLConn ...

  5. Ajax详解及其案例分析------如何获得Ajax对象,使用Ajax对象发送GET和POST请求,校验用户名,POST和GET请求时的乱码处理,实现级联的下拉列表

    本节主要内容预览: 1 获得Ajax对象 2 使用Ajax对象发送GET请求 3 使用Ajax对象发送POST请求 4 使用Ajax校验用户名 5 POST请求时的乱码处理 6 GET请求时的乱码处理 ...

  6. php 利用socket发送GET,POST请求

    作为php程序员一定会接触http协议,也只有深入了解http协议,编程水平才会更进一步.最近我一直在学习php的关于http的编程,许多东西恍然大悟,受益匪浅.希望分享给大家.本文需要有一定http ...

  7. 【转】在C&num;用HttpWebRequest中发送GET&sol;HTTP&sol;HTTPS请求

    http://zhoufoxcn.blog.51cto.com/792419/561934 这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全 ...

  8. python用httplib模块发送get和post请求

    在python中,模拟http客户端发送get和post请求,主要用httplib模块的功能. 1.python发送GET请求 我在本地建立一个测试环境,test.php的内容就是输出一句话: 1 e ...

  9. 在C&num;用HttpWebRequest中发送GET&sol;HTTP&sol;HTTPS请求【转载】

    标签:C# HTTPS HttpWebRequest HTTP HttpWebResponse 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...

随机推荐

  1. linux编译curl库的动态库so(转)

    转载请注明出处:帘卷西风的专栏(http://blog.csdn.NET/ljxfblog) curl库是一个很强大的http开源库,c++里面能够很方便的和http服务器交互. 最近项目开始内测,开 ...

  2. android判断EditText输入的数字、中文还是字母方法

    String txt = edInput.getText().toString(); Pattern p = Pattern.compile("[0-9]*");      Mat ...

  3. ArcGIS中如何导出单个矢量要素图形

    原文:ArcGIS中如何导出单个矢量要素图形 在ARCGIS中载入了一张含有省界的中国地图,是SHP文件.现在我只想要其中一块地区的,实现方法如下: 加入到ArcGIS后,右击图层,打开属性表(att ...

  4. Linux了解进程的地址空间

    供Linux了解虚拟内存,非常好的引导了.原文链接:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26683523&i ...

  5. mustache&period;js 使用

    对于mustache模板,我是属于即用即查的方法,以下记录仅是我常用的方式.方便以后使用时不用再去项目中去找,因为真的不好找.(此处 -->serious 脸) 当需要渲染一些数据列表的时候,使 ...

  6. apache atlas源码编译打包 centos

    参考:https://atlas.apache.org/InstallationSteps.html https://blog.csdn.net/lingbo229/article/details/8 ...

  7. Windows PowerShell 入門(5)-制御構文

    Windows PowerShellにおける制御構文について学びます.数ある制御構文の中でもSwitch文は.他の言語に比べ豊富な機能が用意されています. 対象読者 Windows PowerShel ...

  8. Mysql乐观锁与悲观锁

    乐观锁和悲观锁是两种常见的资源并发锁设计思路,也是并发编程中一个非常重要的基础理念. Mysql的悲观锁 什么是悲观锁(Pessimistic Lock): 悲观锁的特点是先获取锁,再进行业务操作,即 ...

  9. &lt&semi;转&gt&semi;jmeter(二十二)内存溢出原因及解决方法

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...

  10. 以前没有写笔记的习惯,现在慢慢的发现及时总结是多么的重要。 这一篇文章主要关于java多线程一些常见的疑惑点。因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,嘻嘻嘻、大家可以去参考一些那些书籍。我这个文章主要关于实际的一些问题。同时也算是我以后复习的资料吧,。还请大家多多指教。 同时希望多结交一些技术上的朋友。谢谢。

    在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 以下就是我们常见的问题了: 1. 为什么我们不能直接调用run()方法呢? 我的理解是:线程的运行 ...