HttpClient详细使⽤⽰例详解
⽬录
进⼊正题
详细使⽤⽰例
HttpClient 是Apache Jakarta Common 下的⼦项⽬,可以⽤来提供⾼效的、最新的、功能丰富的⽀持 HTTP 协议的客户端编程⼯具包,并且它⽀持 HTTP 协议最新的版本和建议。
HTTP 协议可能是现在 Internet 上使⽤得最多、最重要的协议了,越来越多的 Java 应⽤程序需要直接通过 HTTP 协议来访问⽹络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于⼤部分应⽤程序来说,JDK 库本⾝提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的⼦项⽬,⽤来提供⾼效的、最新的、功能丰富的⽀持 HTTP 协议的客户端编程⼯具包,并且它⽀持 HTTP 协议最新的版本和建议。
HTTP和浏览器有点像,但却不是浏览器。很多⼈觉得既然HttpClient是⼀个HTTP客户端编程⼯具,很多⼈把他当做浏览器来理解,但是其实HttpClient不是浏览器,它是⼀个HTTP通信库,因此它只提供⼀个通⽤浏览器应⽤程序所期望的功能⼦集,最根本的区别是HttpClient中没有⽤户界⾯,浏览器需要⼀个渲染引
擎来显⽰页⾯,并解释⽤户输⼊,例如⿏标点击显⽰页⾯上的某处,有⼀个布局引擎,计算如何显⽰HTML页⾯,包括级联样式表和图像。javascript解释器运⾏嵌⼊HTML页⾯或从HTML页⾯引⽤的javascript代码。来⾃⽤户界⾯的事件被传递到javascript解释器进⾏处理。除此之外,还有⽤于插件的接⼝,可以处理Applet,嵌⼊式媒体对象(如pdf⽂件,Quicktime电影和Flash动画)或ActiveX控件(可以执⾏任何操作)。HttpClient只能以编程的⽅式通过其API⽤于传输和接受HTTP消息。
HttpClient的主要功能:
实现了所有 HTTP 的⽅法(GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS 等)
⽀持 HTTPS 协议
⽀持代理服务器(Nginx等)等
⽀持⾃动(跳转)转向
……
进⼊正题
环境说明:JDK1.8、SpringBoot
准备环节第⼀步:在l中引⼊HttpClient的依赖
第⼆步:引⼊fastjson依赖
注:本⼈引⼊此依赖的⽬的是,在后续⽰例中,会⽤到“将对象转化为json字符串的功能”,也可以引其他有此功能的依赖。
注:SpringBoot的基本依赖配置,这⾥就不再多说了。
详细使⽤⽰例
声明:此⽰例中,以JAVA发送HttpClient(在test⾥⾯单元测试发送的);也是以JAVA接收的(在controller⾥⾯接收的)。
声明:下⾯的代码,本⼈亲测有效。
GET⽆参:
HttpClient发送⽰例:
/**
* GET---⽆参测试
*
* @date 2018年7⽉13⽇下午4:18:50
*/
@Test
public void doGetTestOne() {
// 获得Http客户端(可以理解为:你得先有⼀个浏览器;注意:实际上HttpClient与浏览器是不⼀样的)  CloseableHttpClient httpClient = ate().build();
// 创建Get请求
HttpGet httpGet = new HttpGet("localhost:12345/doGetControllerOne");
// 响应模型
CloseableHttpResponse response = null;
try {
// 由客户端执⾏(发送)Get请求
response = ute(httpGet);
// 从响应模型中获取响应实体
HttpEntity responseEntity = Entity();
System.out.println("响应状态为:" + StatusLine());
if (responseEntity != null) {
System.out.println("响应内容长度为:" + ContentLength());
System.out.println("响应内容为:" + String(responseEntity));
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 释放资源
if (httpClient != null) {
httpClient.close();
}
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
对应接收⽰例:
GET有参(⽅式⼀:直接拼接URL):
HttpClient发送⽰例:
fastjson怎么用/**
* GET---有参测试 (⽅式⼀:⼿动在url后⾯加上参数)
*
* @date 2018年7⽉13⽇下午4:19:23
*/
@Test
public void doGetTestWayOne() {
// 获得Http客户端(可以理解为:你得先有⼀个浏览器;注意:实际上HttpClient与浏览器是不⼀样的)
CloseableHttpClient httpClient = ate().build();
// 参数
StringBuffer params = new StringBuffer();
try {
// 字符数据最好encoding以下;这样⼀来,某些特殊字符才能传过去(如:某⼈的名字就是“&”,不encoding的话,传不过去)  params.append("name=" + de("&", "utf-8"));
params.append("&");
params.append("age=24");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
// 创建Get请求
HttpGet httpGet = new HttpGet("localhost:12345/doGetControllerTwo" + "?" + params);
// 响应模型
CloseableHttpResponse response = null;
try {
// 配置信息
RequestConfig requestConfig = RequestConfig.custom()
// 设置连接超时时间(单位毫秒)
.setConnectTimeout(5000)
// 设置请求超时时间(单位毫秒)
.setConnectionRequestTimeout(5000)
// socket读写超时时间(单位毫秒)
.setSocketTimeout(5000)
// 设置是否允许重定向(默认为true)
.setRedirectsEnabled(true).build();
// 将上⾯的配置信息运⽤到这个Get请求⾥
httpGet.setConfig(requestConfig);
/
/ 由客户端执⾏(发送)Get请求
response = ute(httpGet);
// 从响应模型中获取响应实体
HttpEntity responseEntity = Entity();
System.out.println("响应状态为:" + StatusLine());
if (responseEntity != null) {
System.out.println("响应内容长度为:" + ContentLength());
System.out.println("响应内容为:" + String(responseEntity));
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 释放资源
if (httpClient != null) {
httpClient.close();
}
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
对应接收⽰例:
GET有参(⽅式⼆:使⽤URI获得HttpGet):
HttpClient发送⽰例:
/**
* GET---有参测试 (⽅式⼆:将参数放⼊键值对类中,再放⼊URI中,从⽽通过URI得到HttpGet实例)  *
* @date 2018年7⽉13⽇下午4:19:23
*/
@Test
public void doGetTestWayTwo() {
// 获得Http客户端(可以理解为:你得先有⼀个浏览器;注意:实际上HttpClient与浏览器是不⼀样的)  CloseableHttpClient httpClient = ate().build();
// 参数
URI uri = null;
try {
// 将参数放⼊键值对类NameValuePair中,再放⼊集合中
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("name", "&"));
params.add(new BasicNameValuePair("age", "18"));
// 设置uri信息,并将参数集合放⼊uri;
// 注:这⾥也⽀持⼀个键值对⼀个键值对地往⾥⾯放setParameter(String key, String value)
uri = new URIBuilder().setScheme("http").setHost("localhost")
.setPort(12345).setPath("/doGetControllerTwo")
.setParameters(params).build();
} catch (URISyntaxException e1) {
e1.printStackTrace();
}
// 创建Get请求
HttpGet httpGet = new HttpGet(uri);
// 响应模型
CloseableHttpResponse response = null;
try {
// 配置信息
RequestConfig requestConfig = RequestConfig.custom()
// 设置连接超时时间(单位毫秒)
.setConnectTimeout(5000)
// 设置请求超时时间(单位毫秒)
.setConnectionRequestTimeout(5000)
// socket读写超时时间(单位毫秒)
.
setSocketTimeout(5000)
// 设置是否允许重定向(默认为true)
.setRedirectsEnabled(true).build();
// 将上⾯的配置信息运⽤到这个Get请求⾥
httpGet.setConfig(requestConfig);
// 由客户端执⾏(发送)Get请求
response = ute(httpGet);
// 从响应模型中获取响应实体
HttpEntity responseEntity = Entity();
System.out.println("响应状态为:" + StatusLine());
if (responseEntity != null) {
System.out.println("响应内容长度为:" + ContentLength());
System.out.println("响应内容为:" + String(responseEntity));
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
/
/ 释放资源
if (httpClient != null) {
httpClient.close();
}
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
对应接收⽰例:
POST⽆参:
HttpClient发送⽰例:
/**
* POST---⽆参测试
*
* @date 2018年7⽉13⽇下午4:18:50
*/
@Test
public void doPostTestOne() {
// 获得Http客户端(可以理解为:你得先有⼀个浏览器;注意:实际上HttpClient与浏览器是不⼀样的)  CloseableHttpClient httpClient = ate().build();
// 创建Post请求
HttpPost httpPost = new HttpPost("localhost:12345/doPostControllerOne");
// 响应模型
CloseableHttpResponse response = null;
try {
// 由客户端执⾏(发送)Post请求
response = ute(httpPost);
// 从响应模型中获取响应实体
HttpEntity responseEntity = Entity();
System.out.println("响应状态为:" + StatusLine());
if (responseEntity != null) {
System.out.println("响应内容长度为:" + ContentLength());
System.out.println("响应内容为:" + String(responseEntity));
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。