【SpringBoot】HttpClient
介绍
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
作用
-
发送HTTP请求
-
接收响应数据
导入依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
核心API
-
HttpClient:Http客户端对象类型,使用该类型对象可发起Http请求。
-
HttpClients:可认为是构建器,可创建HttpClient对象。
-
CloseableHttpClient:实现类,实现了HttpClient接口。
-
HttpGet:Get方式请求类型。
-
HttpPost:Post方式请求类型。
实现步骤:
-
创建HttpClient对象
-
创建请求对象
-
发送请求,接受响应结果
-
解析结果
-
关闭资源
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/{name}")
public String test(@PathVariable String name){
return "my name is " + name;
}
}
GET方式请求
@SpringBootTest
public class HttpClientTest {
@Test
public void testGET() throws Exception{
String url = "http://localhost:8080/test/Tom";
// 创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建GET请求对象
HttpGet httpGet = new HttpGet(url);
// 发出请求,接收响应
CloseableHttpResponse response = httpClient.execute(httpGet);
// 处理响应
int statusCode = response.getStatusLine().getStatusCode();
System.out.println(response.getStatusLine());
System.out.println("服务端返回的状态码:" + statusCode);
// 关闭资源
response.close();
httpClient.close();
}
}
POST方式请求
/**
* 测试通过httpclient发送POST方式的请求
*/
@Test
public void testPOST() throws Exception{
// 创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");
JSONObject jsonObject = new JSONObject();
jsonObject.put("username","admin");
jsonObject.put("password","123456");
StringEntity entity = new StringEntity(jsonObject.toString());
//指定请求编码方式
entity.setContentEncoding("utf-8");
//数据格式
entity.setContentType("application/json");
httpPost.setEntity(entity);
//发送请求
CloseableHttpResponse response = httpClient.execute(httpPost);
//解析返回结果
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("响应码为:" + statusCode);
HttpEntity entity1 = response.getEntity();
String body = EntityUtils.toString(entity1);
System.out.println("响应数据为:" + body);
//关闭资源
response.close();
httpClient.close();
}