CloseableHttpClient的使用

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Slf4j
public class HttpClientUtils {

    /**
     * 套接字超时时间
     */
    private static final int SOCKET_TIME_OUT = 10 * 1000;
    /**
     * 连接超时时间
     */
    private static final int CONNECT_TIME_OUT = 15 * 1000;
    /**
     * httpClient客户端
     */
    private static volatile CloseableHttpClient httpClient = null;
    /**
     * MIMETYPE_JSON
     */
    public static final String MIMETYPE_JSON = "application/json";
    /**
     * MIMETYPE_FORM
     */
    public static final String MIMETYPE_FORM = "application/x-www-form-urlencoded";
    /**
     * POST_HEADER_KEY
     */
    private static final String POST_HEADER_KEY = "User-Agent";
    /**
     * POST_HEADER_VALUE
     */
    private static final String POST_HEADER_VALUE = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36";
    /**
     * 字符编码
     */
    private static final String CHART_SET = "utf-8";

    /**
     * 请求成功状态
     */
    private static final Integer SUCCESS_CODE = 200;


    /**
     * 返回单例CloseableHttpClient
     *
     * @return CloseableHttpClient
     */
    public static CloseableHttpClient httpClient() {
        if (httpClient == null) {
            synchronized (HttpClientUtils.class) {
                if (httpClient == null) {
                    RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIME_OUT)
                            .setSocketTimeout(SOCKET_TIME_OUT).build(); //超时时间单位为毫秒
                    httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
                }
            }
        }
        return httpClient;
    }

    /**
     * 以get的方式获取response
     *
     * @param requst httpGet
     * @return CloseableHttpResponse
     */
    public static CloseableHttpResponse submit(HttpUriRequest requst) throws Exception {
        return httpClient().execute(requst);
    }


    /**
     * 执行请求获取返回数据
     *
     * @param request
     * @return
     */
    public static String execute(HttpUriRequest request) throws Exception {
        CloseableHttpResponse response = httpClient().execute(request);
        //获取实体
        HttpEntity entity = response.getEntity();
        //将实体装成字符串
        String html = EntityUtils.toString(entity);
        EntityUtils.consume(entity);
        response.close();
        return html;
    }


    /**
     * 创建HttpGet
     *
     * @param url 链接
     * @return HttpGet
     */
    public static HttpGet createHttpGet(String url) {
        HttpGet httpGet = new HttpGet(url);
        httpGet.addHeader(POST_HEADER_KEY, POST_HEADER_VALUE);
        return httpGet;
    }

    /**
     * 创建HttpPost带请求参数
     *
     * @param url      链接
     * @param params   参数
     * @param mimeType 格式
     * @return HttpPost
     */
    public static HttpPost createHttpPost(String url, Map<String, Object> params, String mimeType) throws Exception {
        HttpPost post = createHttpPost(url);
        if (params != null) {
            HttpEntity entity;
            if (MIMETYPE_FORM.equals(mimeType)) {
                entity = new UrlEncodedFormEntity(createParam(params), CHART_SET);
            } else {
                String jsonParams = JSON.toJSONString(params);
                entity = new StringEntity((jsonParams), mimeType, CHART_SET);
            }
            post.setEntity(entity);
        }
        return post;
    }

    /**
     * 创建HttpPost
     *
     * @param url 链接
     * @return HttpPost
     */
    public static HttpPost createHttpPost(String url) {
        HttpPost post = new HttpPost(url);
        post.addHeader(POST_HEADER_KEY, POST_HEADER_VALUE);
        return post;
    }

    /**
     * 创建HttpPut
     *
     * @param url 链接
     * @return HttpPost
     */
    public static HttpPut createHttpPut(String url) {
        HttpPut put = new HttpPut(url);
        put.addHeader(POST_HEADER_KEY, POST_HEADER_VALUE);
        return put;
    }

    /**
     * 创建HttpDelete
     *
     * @param url 链接
     * @return HttpDelete
     */
    public static HttpDelete createHttpDelete(String url) {
        HttpDelete httpDelete = new HttpDelete(url);
        httpDelete.addHeader(POST_HEADER_KEY, POST_HEADER_VALUE);
        return httpDelete;
    }

    /**
     * 创建HttpPost带请求参数
     *
     * @param request  请求
     * @param params   参数
     * @param mimeType 格式
     */
    public static void setParam(HttpEntityEnclosingRequestBase request, Map<String, Object> params, String mimeType) throws Exception {
        if (params != null) {
            HttpEntity entity;
            if (MIMETYPE_FORM.equals(mimeType)) {
                entity = new UrlEncodedFormEntity(createParam(params), CHART_SET);
            } else {
                String jsonParams = JSON.toJSONString(params);
                entity = new StringEntity((jsonParams), mimeType, CHART_SET);
            }
            request.setEntity(entity);
        }
    }

    /**
     * 生成NameValuePair
     *
     * @param param 参数
     * @return List<NameValuePair>
     */
    public static List<NameValuePair> createParam(Map<String, Object> param) {
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        if (param != null) {
            for (String k : param.keySet()) {
                nvps.add(new BasicNameValuePair(k, param.get(k).toString()));
            }
        }
        return nvps;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值