java http client 请求接口工具类封装

这个Java类实现了HttpClient的初始化和管理,包括连接池设置、请求配置、GET和POST请求的执行,以及获取OAuth token的功能。类中定义了静态常量用于状态码和超时设置,并通过静态初始化块进行HttpClient实例的创建和配置。
摘要由CSDN通过智能技术生成
public class HttpClientUtil {
    private final static Logger log = LoggerFactory.getLogger(HttpClientUtil.class);

    /**
     * 发送请求后的状态码
     */
    private static final int CODE = 200;
    /**
     * 线程池管理
     */

    private static final PoolingHttpClientConnectionManager POOL_HTTP_CON_MANAGER;
    /**
     * 请求器配置
     */
    private static final RequestConfig REQUEST_CONFIG;

    private static final CloseableHttpClient HTTP_CLIENT;

    static {
        POOL_HTTP_CON_MANAGER = new PoolingHttpClientConnectionManager();
        //最大连接数
        POOL_HTTP_CON_MANAGER.setMaxTotal(10);
        //路由基数
        POOL_HTTP_CON_MANAGER.setDefaultMaxPerRoute(10);

        REQUEST_CONFIG = RequestConfig.custom()
                //从连接池中取连接的超时时间
                .setConnectionRequestTimeout(6000)
                //连接超时时间
                .setConnectTimeout(6000)
                //请求超时时间
                .setSocketTimeout(6000).build();
        HTTP_CLIENT = getConnection();

    }

    public static CloseableHttpClient getConnection() {
        CloseableHttpClient httpClient = HttpClients.custom()
                // 设置连接池管理
                .setConnectionManager(POOL_HTTP_CON_MANAGER)
                // 设置请求配置
                .setDefaultRequestConfig(REQUEST_CONFIG)
                // 设置重试次数
                .setRetryHandler(new DefaultHttpRequestRetryHandler(0, false))
                .build();

        if (POOL_HTTP_CON_MANAGER != null && POOL_HTTP_CON_MANAGER.getTotalStats() != null) {
            log.info("创建新 client pool {}", POOL_HTTP_CON_MANAGER.getTotalStats().toString());
        }

        return httpClient;
    }

    public static JSONObject doGet(String url) {
        JSONObject jsonObject = new JSONObject();
        CloseableHttpResponse response = null;
        try {
            //设置请求地址,创建 URIBuilder
            URIBuilder uriBuilder = new URIBuilder(url);

            HttpGet httpGet = new HttpGet(uriBuilder.build());
            // 配置请求信息
            httpGet.setConfig(REQUEST_CONFIG);
            //发起请求
            response = HTTP_CLIENT.execute(httpGet);
            if (response.getStatusLine().getStatusCode() == CODE) {
                HttpEntity entity = response.getEntity();
                String json = EntityUtils.toString(entity, "utf-8");
                jsonObject = JSONObject.parseObject(json);
                log.info("请求url:{}后,返回的数据:{}", url, json);
            }

        } catch (URISyntaxException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                    log.info("关闭连接请求!");
                }
            } catch (IOException e) {
                log.error("关闭发送请求失败!");
                e.printStackTrace();
            }
        }
        return jsonObject;
    }

    public static JSONObject doPost(String url, String params) {
        JSONObject jsonObject = new JSONObject();
        CloseableHttpResponse response = null;
        try {
            //设置请求地址,创建 URIBuilder
            URIBuilder uriBuilder = new URIBuilder(url);
            log.info("请求地址:{}{}", uriBuilder.getHost(), uriBuilder.getPath());

            HttpPost httpPost = new HttpPost(uriBuilder.build());
            // 配置请求信息
            httpPost.setConfig(REQUEST_CONFIG);
            //封装请求参数
            if (StringUtils.isNotBlank(params)) {
                log.info("有参数请求:{}", params);
                StringEntity stringEntity = new StringEntity(params, "UTF-8");
                stringEntity.setContentEncoding("UTF-8");
                stringEntity.setContentType("application/json");
                httpPost.setEntity(stringEntity);
            }
            //发起请求
            response = HTTP_CLIENT.execute(httpPost);
            HttpEntity entity = response.getEntity();
            String str = EntityUtils.toString(entity, "utf-8");
            jsonObject = JSONObject.parseObject(str);
        } catch (URISyntaxException | IOException e) {
            log.error("发送请求失败.....");
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                    log.info("关闭连接请求!");
                }
            } catch (IOException e) {
                log.error("关闭发送请求失败!");
                e.printStackTrace();
            }
        }
        log.info("请求接口返回的数据:{}", jsonObject.toJSONString());
        return jsonObject;
    }

    public static Map<String, String> getToken(String url) {
        Map<String, String> rs = new HashMap<>(2);
        rs.put("token", "");
        rs.put("time", "0");
        CloseableHttpResponse response = null;
        try {
            //设置请求地址,创建 URIBuilder
            URIBuilder uriBuilder = new URIBuilder(url + "/oauth/token");
            log.info("请求地址:{}{}", uriBuilder.getHost(), uriBuilder.getPath());
            //获取token的参数
            List<NameValuePair> nvp = new ArrayList<>();
            uriBuilder.setParameters(nvp);
            // 创建post 请求
            HttpPost httpPost = new HttpPost(uriBuilder.build());
            // 配置请求信息
            httpPost.setConfig(REQUEST_CONFIG);
            //发起请求
            response = HTTP_CLIENT.execute(httpPost);
            if (response.getStatusLine().getStatusCode() == CODE) {
                HttpEntity entity = response.getEntity();
                JSONObject parse = JSONObject.parseObject(EntityUtils.toString(entity, "utf-8"));
                String author = parse.getString("access_token");
                String time = parse.getString("expires_in");
                author = String.format("%s %s", "Bearer", author);
                rs.put("token", author);
                rs.put("time", time);
                log.info("已获取token:{}", author);
            } else {
                log.info("请求获取token失败!");
            }

        } catch (URISyntaxException | IOException e) {
            log.error("发送请求失败.....");
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                    log.info("关闭连接请求!");
                }
            } catch (IOException e) {
                log.error("关闭发送请求失败!");
                e.printStackTrace();
            }
        }
        return rs;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值