HttpClient入门

    科技2022-07-14  136

    HttpClient介绍

    HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.5 .6(2015-09-11)

    jar包依赖

    <!--添加httpClient jar包 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency>

    入门案例

    package com.jt.test; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.junit.jupiter.api.Test; import java.io.IOException; public class TestHttpClient { /** * 步骤: * 1.实例化httpClient工具API * 2.定义请求url地址 任意网络地址.... * 3.定义请求的类型 get/post/put/delete * 4.发起请求,获取响应的结果 * 5.判断响应的状态码信息. 200 404 500 406 400.... * 6.动态解析返回值执行后续操作. */ @Test public void test01(){ HttpClient httpClient = HttpClients.createDefault(); String url = "https://www.baidu.com/"; HttpGet get = new HttpGet(url); try { HttpResponse httpResponse = httpClient.execute(get); //判断状态码是否正确 int statusCode = httpResponse.getStatusLine().getStatusCode(); if(statusCode == 200){ //表示请求正确 HttpEntity httpEntity = httpResponse.getEntity(); //获取服务器的全部响应信息(json/html/xml/xxxx) String result = EntityUtils.toString(httpEntity,"UTF-8"); //获取之后可以执行业务处理...... System.out.println(result); } } catch (IOException e) { e.printStackTrace(); } } }

    HttpClient远程调用–实际案例

    1.1需求说明:

    需求:根据userId查询用户的信息. 1.用户的url地址: http://www.jt.com/findUserById/7; 2.需要在jt-web的Controller中动态的接收数据.将请求转给sso单点登录系统 url:http://sso.jt.com/findUserById/7 3.在jt-sso中的Controller根据userId查询用户信息.

    1.2编辑jt-web Controller

    /** * 为了测试httpClient 实现业务功能查询用户信息 * url地址:http://www.jt.com/user/findUserById/7 * 参数: 7用户ID * 返回值: user对象 */ @RequestMapping("/findUserById/{userId}") @ResponseBody public User findUserById(@PathVariable Long userId){ return userService.findUserById(userId); }

    1.3编辑前端 Service

    @Service public class UserServiceImpl implements UserService{ /** * 由jt-web向jt-sso进行数据的请求.之后获取数据. * @param userId * @return */ @Override public User findUserById(Long userId) { //1.定义url地址 String url = "http://sso.jt.com/user/findUserById/"+userId; HttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); try { HttpResponse httpResponse = httpClient.execute(httpGet); if(httpResponse.getStatusLine().getStatusCode() == 200){ HttpEntity httpEntity = httpResponse.getEntity(); //json格式 String result = EntityUtils.toString(httpEntity, "UTF-8"); return ObjectMapperUtil.toObject(result, User.class); }else{ throw new RuntimeException("请求失败,请校验地址信息"); } } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } }

    1.4编辑后端 Controller

    /** * 测试httpClient调用方式 * url地址: http://sso.jt.com/user/findUserById/"+userId * 返回: user对象的JSON数据 */ @RequestMapping("/findUserById/{userId}") public User findUserById(@PathVariable Long userId){ return userService.findUserById(userId); }

    1.5编辑后端 Service

    @Override public User findUserById(Long userId) { return userMapper.selectById(userId); }

    1.6HttpClient调用流程图

    Processed: 0.013, SQL: 8