接口测试——httpclient介绍与请求方式详解
httpClient工具介绍
HTTP协议可能是现在lntemet上使用得最多、最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源。虽然在JDK的java.net包中已经提供了访问http协议的基木功能,但是对于大部分应用程序来说,JDK库本身提供的功能还不够丰富和灵活。HttpClient是ApaChe、JakamComnmn下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP协议的客户端编程工具包,并且它支持HTTP办议最新的版术和建议。
httpClient工具的安装
所需要依赖的jar包是以下三个:
http-core-4.4.6.jar、commons-logging-1.2.jar、commons-codec-1.10.jar
方法一:到Apache官网下载工具包,然后导入到eclipse中即可,下载地址:http://hc.apache.org/downloads.cgi
方法二:前提条件是:eclipse要配置好Maven,在工程中的pom.xml文件中,写入代码,保存便自动下载jar包。搜索httpclient地址:http://www.mvnrepository.com/,操作如下所示:
①点击网址,进入首页,在搜索框中输入httpclient搜索

②点击搜索出来的第一个Apache HttpClient

③选择不同的版本,点击(本文以4.5.3版本为例)

④将上图红色框中的代码复制到eclipse建的Maven工程中的pom.xml文件下,操作如下图所示:

⑤保存pom.xml文件后,便会自动下载jar包,可在Maven工具包中查看到
httpClient工具的主要功能
1.实现了所有HTTP的方法(get、post、put、head等)
2.支持自动转向
3.支持代理服务器
4.自动处理set-cookie中的cookie
5.直接获取服务器发送的response code和headers
6.设置连接超时的能力
需要注意的是,httpclient版本的不同,功能实现的代码也就不同,需要谨慎。
httpclient使用流程
1. 创建HttpClient对象。
2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求, 创建HttpGet对象; 如果需要发送POST请求,创建HttpPost对象。
3. 如果需要发送请求参数, 可调用HttpGet、 HttpPost共同的setParams(HetpParams params)方法来添加请求参数; 对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求该方法返回一个HttpResponse。
5. 调用HttpResponse的getAllHeaders()、 getHeaders(String name)等方法可获取服务器的响应头; 调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。 程序可通过该对象获取服务器的响应内容。
6. 释放连接。 无论执行方法是否成功, 都必须释放连接。
说了这么多随处可见的东西,来两个实例,分别是get和post请求操作
get实例,url地址为百度地址,代码如下:
import java.io.IOException; import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils; public class yihuqingjiu_get { public static void main(String[] args) throws ClientProtocolException, IOException{
//创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求方法的实例, 并指定请求url
HttpGet httpget=new HttpGet("http://www.baidu.com");
//获取http响应状态码
CloseableHttpResponse response=httpClient.execute(httpget);
HttpEntity entity=response.getEntity();
//接收响应头
String content=EntityUtils.toString(entity, "utf-8");
System.out.println(httpget.getURI());
System.out.println(content);
httpClient.close();
} }
控制台显示结果如下图所示:

带参数的post实例,url地址为禅道地址,代码如下:
package com.httpclient; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; public class yihuqingjiu_post_1 { public static void main(String[] args) throws ClientProtocolException, IOException { CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://127.0.0.1:81/zentao/user-login-L3plbnRhby8=.html");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("account", "admin"));
nameValuePairs.add(new BasicNameValuePair("password", "LHongboss941025"));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity, "utf-8");
System.out.println(content);
System.out.println(httpPost.getURI());
System.out.println(response);
httpClient.close(); } }
控制台显示结果如下图所示:

带参数的get请求,接口使用的是豆瓣图书,代码如下:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; public class yihuqingjiu_get_1 { public static void main(String[] args) throws ClientProtocolException, IOException {
//创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("q", "瓦尔登湖"));
String str = EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs,
Consts.UTF_8));
HttpGet httpGet = new HttpGet("https://api.douban.com/v2/book/search"+"?"+str);
CloseableHttpResponse response=httpClient.execute(httpGet);
HttpEntity entity=response.getEntity();
//接收响应头
String content=EntityUtils.toString(entity, "utf-8");
System.out.println(content);
httpClient.close(); } }
控制台显示结果:

这样显示看不出什么效果,需要使用json解析工具格式化就可以,解析工具地址:http://www.bejson.com/,操作如下所示:
①进入网址,点击JSON相关,选择JSON视图

②将eclipse控制台的信息复制到输入框中,并点击格式化

③点击格式化之后,再点击视图,即可出现如下界面,可清晰查看信息

接口测试——httpclient介绍与请求方式详解的更多相关文章
- httpclient介绍与请求方式详解
httpClient工具介绍 HTTP协议可能是现在lntemet上使用得最多.最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源.虽然在JDK的java.net包中已经 ...
- Android进阶(一)几种网络请求方式详解
Ref:http://blog.csdn.net/zuolongsnail/article/details/6373051 Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面 ...
- Get,Post请求方式详解
前几天工作中,所有表单我都采用post方法,头儿说那样不好,大型网站上一般都采用get方法,不理解. 在网上摘到一段比较有用的话 减低服务器流量压力根据 HTTP 规范,GET 用于信息获取,而且应该 ...
- resttemplate 请求方式详解
get 普通请求: restemplate.getForEntity(url,String.class).getBody(); get 导出请求: restemplate.getForEntity(u ...
- 在ASP.NET 5应用程序中的跨域请求功能详解
在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏 ...
- JS JSOP跨域请求实例详解
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.这篇文章主要介绍了JS JSOP跨域请求实例详解的相关资料,需要的朋友可以参考下 ...
- vuex的使用及持久化state的方式详解
vuex的使用及持久化state的方式详解 转载 更新时间:2018年01月23日 09:09:37 作者:baby格鲁特 我要评论 这篇文章主要介绍了vuex的使用及持久化state的方 ...
- HTTP请求方法详解
HTTP请求方法详解 请求方法:指定了客户端想对指定的资源/服务器作何种操作 下面我们介绍HTTP/1.1中可用的请求方法: [GET:获取资源] GET方法用来请求已被URI识别的资源.指定 ...
- Dubbo配置方式详解
Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是阿里巴巴 SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次 ...
随机推荐
- DOM+面向对象面试题
1.dom常见的节点类型---------------------------解彬1510-B 1.nodeType------节点类型,元素节点是1,文本节点是3. 2.firstChild---- ...
- SPOJ 104 HIGH - Highways 生成树计数
题目链接:https://vjudge.net/problem/SPOJ-HIGH 解法: 生成树计数 1.构造 基尔霍夫矩阵(又叫拉普拉斯矩阵) n阶矩阵 若u.v之间有边相连 C[u][v]=C[ ...
- JavaScript--我发现!原来你是这样的JS(1)
一.前言: 前段时间看红宝书(JavaScript高级程序设计),但没有计划的去看,也没有做详细的笔记,读了之后有点空虚,感觉不对劲啊,学的东西很难记住,印象不深啊,有种挫败感,作前端的js都学不好怎 ...
- 9-9害死人不偿命的(3n+1)猜想
1001. 害死人不偿命的(3n+1)猜想 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Ca ...
- ArrayBuffer和TypedArray,以及Blob的使用
前端使用TypedArray编辑二进制 ES6提供了, ArrayBuffer和TypedArray, 让前端也可以直接操作编辑二进制数据, 网页中的类型为file的input标签, 也可以通过Fil ...
- HTML语言笔记
html语言即超文本标记语言. 超文本标记语言,标准通用标记语言下的一个应用. "超文本"就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元 ...
- webpack配置这一篇就够
最近看了一篇好文,根据这个文章重新梳理了一遍webpack打包过程,以前的一些问题也都清楚了,在这里分享一下,同时自己也做了一些小的调整 原文链接:http://www.jianshu.com/p/4 ...
- shell下office、html、pdf文档互转方法
分类: 后台开发 版权声明:本文为博主原创文章,未经博主允许不得转载. OFFICE 文档在线预览方案很多: 服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览,比如flexp ...
- 转:swagger 入门
前言 swagger ui是一个API在线文档生成和测试的利器,目前发现最好用的. 为什么好用?Demo 传送门 支持API自动生成同步的在线文档 这些文档可用于项目内部API审核 方便测试人员了解A ...
- java1.8新特性
转自:http://www.oschina.NET/translate/everything-about-Java-8 建议去看原文,此处转载只是为了记录. 这篇文章是对Java8中即将到来的改进做一 ...