HttpClient实现 get、post、put、delete请求【转】

来自:HttpClient实现 get、post、put、delete请求_httpclient put请求-CSDN博客

目录

HttpClient

HttpClient的主要功能

httpclient使用示例主要步骤

Spring Boot 工程结构

HttpClient实现主要代码:

GET

POST

PUT

Delete

HttpClient

HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,方便在日常项目开发中,调用第三方接口数据。

HttpClient的主要功能

实现了所有 HTTP 的方法(GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS 等)

支持 HTTPS 协议

支持代理服务器(Nginx等)等

支持自动(跳转)转向

环境说明:JDK1.8、SpringBoot(2.2.2)

在pom.xml中引入HttpClient的依赖和SpringBoot的基本依赖配置(web,jpa,fastjson,mysql)。

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.5.3</version>

</dependency>

httpclient使用示例主要步骤

【步骤】:

1)创建一个httpclient对象,注意以下版本问题说明

HttpClient4.0版本前:

HttpClient httpClient = new DefaultHttpClient();

4.0版本后:

CloseableHttpClient httpClient = HttpClientBuilder.create().build();

2)创建一个httpGet对象

HttpGet request = new HttpGet(uri);

3)执行请求调用httpclient的execute(),传入httpGet对象,返回CloseableHttpResponse response = httpClient.execute(request, HttpClientContext.create());

4)取得响应结果并处理

5)关闭HttpClient

注意:主动设置编码,防止响应出现乱码

Spring Boot 工程结构

HttpClient实现主要代码:

GET

/**GET有参:

*/

@Autowired

private UserServiceImple userServiceImple;

@Test

public void getByUsername(){

List<User> users = userServiceImple.findByUserName("王三");

System.out.println(JSON.toJSONString(users));

}

@Test

public void doGetTestWayOne() {

// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)

CloseableHttpClient httpClient = HttpClientBuilder.create().build();

// 创建Get请求

HttpGet httpGet = new HttpGet("http://localhost:8080/user/2");

// 响应模型

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 = httpClient.execute(httpGet);

// 从响应模型中获取响应实体

HttpEntity responseEntity = response.getEntity();

System.out.println("响应状态为:" + response.getStatusLine());

if (responseEntity != null) {

System.out.println("响应内容长度为:" + responseEntity.getContentLength());

//主动设置编码,防止相应出现乱码

System.out.println("响应内容为:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));

}

} 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

/**

* POST---有参测试(对象参数)

*

* @date

*/

@Test

public void dopostHaveObjectParam() {

// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)

CloseableHttpClient httpClient = HttpClientBuilder.create().build();

// 创建Post请求

HttpPost httpPost = new HttpPost("http://localhost:8080/user");

User user = new User();

user.setUserName("张山");

user.setPassword("Ss@1234");

// 我这里利用阿里的fastjson,将Object转换为json字符串;

// (需要导入com.alibaba.fastjson.JSON包)

String jsonString = JSON.toJSONString(user);

// 主动设置编码,防止出现乱码

StringEntity entity = new StringEntity(jsonString, "UTF-8");

// post请求是将参数放在请求体里面传过去的;这里将entity放入post请求体中

httpPost.setEntity(entity);

httpPost.setHeader("Content-Type", "application/json;charset=utf8");

// 响应模型

CloseableHttpResponse response = null;

try {

// 由客户端执行(发送)Post请求

response = httpClient.execute(httpPost);

// 从响应模型中获取响应实体

HttpEntity responseEntity = response.getEntity();

System.out.println("响应状态为:" + response.getStatusLine());

if (responseEntity != null) {

System.out.println("响应内容长度为:" + responseEntity.getContentLength());

//主动设置编码,防止相应出现乱码

System.out.println("响应内容为:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));

}

} 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();

}

}

}

PUT

/**

* Put---有参测试(对象参数)

*

* @date

*/

@Test

public void doPutObjectParam() {

// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)

CloseableHttpClient httpClient = HttpClientBuilder.create().build();

// 创建Put请求

HttpPost httpPut = new HttpPost("http://localhost:8080/user");

User user = new User();

user.setId((long) 2);

user.setUserName("张山");

user.setPassword("Ss@1234");

// 我这里利用阿里的fastjson,将Object转换为json字符串;

// (需要导入com.alibaba.fastjson.JSON包)

String jsonString = JSON.toJSONString(user);

// 主动设置编码,防止出现乱码

StringEntity entity = new StringEntity(jsonString, "UTF-8");

// post请求是将参数放在请求体里面传过去的;这里将entity放入Put请求体中

httpPut.setEntity(entity);

httpPut.setHeader("Content-Type", "application/json;charset=utf8");

// 响应模型

CloseableHttpResponse response = null;

try {

// 由客户端执行(发送)Put请求

response = httpClient.execute(httpPut);

// 从响应模型中获取响应实体

HttpEntity responseEntity = response.getEntity();

System.out.println("响应状态为:" + response.getStatusLine());

if (responseEntity != null) {

System.out.println("响应内容长度为:" + responseEntity.getContentLength());

//主动设置编码,防止相应出现乱码

System.out.println("响应内容为:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));

}

} 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();

}

}

}

Delete

/**

* DeleteTest

*/

@Test

public void doDeleteTest() {

// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)

CloseableHttpClient httpClient = HttpClientBuilder.create().build();

// 创建Delete请求

HttpDelete httpDelete = new HttpDelete("http://localhost:8080/user/41");

// 响应模型

CloseableHttpResponse response = null;

try {

// 配置信息

RequestConfig requestConfig = RequestConfig.custom()

// 设置连接超时时间(单位毫秒)

.setConnectTimeout(5000)

// 设置请求超时时间(单位毫秒)

.setConnectionRequestTimeout(5000)

// socket读写超时时间(单位毫秒)

.setSocketTimeout(5000)

// 设置是否允许重定向(默认为true)

.setRedirectsEnabled(true).build();

// 将上面的配置信息 运用到这个Delete请求里

httpDelete.setConfig(requestConfig);

// 由客户端执行(发送)Delete请求

response = httpClient.execute(httpDelete);

// 从响应模型中获取响应实体

HttpEntity responseEntity = response.getEntity();

System.out.println("响应状态为:" + response.getStatusLine());

if (responseEntity != null) {

System.out.println("响应内容长度为:" + responseEntity.getContentLength());

//主动设置编码,防止相应出现乱码

System.out.println("响应内容为:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));

}

} 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();

}

}

}


版权声明:本文为CSDN博主「紫金小飞侠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/yangshengwei230612/article/details/103964905

相关推荐
limengshi1383922 小时前
通信工程学习:什么是TFTP简单文件传输协议
网络·网络协议·学习·信息与通信
麻辣韭菜4 小时前
网络基础 【HTTP】
网络·c++·http
Deryck_德瑞克6 小时前
Java网络通信—TCP
java·网络·tcp/ip
GodK7776 小时前
IP 数据包分包组包
服务器·网络·tcp/ip
梁诚斌6 小时前
VSOMEIP代码阅读整理(1) - 网卡状态监听
运维·服务器·网络
ZachOn1y7 小时前
计算机网络:计算机网络概述 —— 描述计算机网络的参数
网络·tcp/ip·计算机网络·考研必备
我命由我123457 小时前
SSL 协议(HTTPS 协议的关键)
网络·经验分享·笔记·学习·https·ssl·学习方法
两点王爷8 小时前
使用WebClient 快速发起请求(不使用WebClientUtils工具类)
java·网络
wusam8 小时前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)
运维·服务器·网络·docker·容器
什么鬼昵称10 小时前
Pikachu-xxe-xxe漏洞
网络·安全·xxe