HttpClient封装工具类

 

 URIBuilder

URIBuilder ub = new URIBuilder();
URI uri = ub.setScheme("http")
             .setHost("www.google.com")
             .setPath("/search")
             .setParameter("q", "编程狗的博客")
             .setParameter("btnG", "Google Search")
             .setParameter("aq", "f")
             .setParameter("oq", "")
             .build();
System.out.println(uri);
// http://www.google.com/search?q=编程狗的博客&btnG=Google Search&aq=f&oq=

 

封装httpclient

1. 引入依赖

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.12</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.72</version>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>  
Maven依赖

 2. 封装

import org.apache.commons.lang.StringEscapeUtils;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Map;

// 不允许被继承
public final class HttpClientUtils {

    // 不允许创建对象
    private HttpClientUtils() {
    }

    private static volatile PoolingHttpClientConnectionManager cm;// 连接池配置管理

    private static String UTF_8 = "UTF-8";

    private static String EMPTY_STR = "";

    /**
     * 配置初始化
     */
    private static synchronized void init() {
        if (cm == null) {
            cm = new PoolingHttpClientConnectionManager();
            cm.setMaxTotal(50);// 整个连接池最大连接数
            cm.setDefaultMaxPerRoute(25);// 每路由最大连接数,默认值是2
        }
    }

    /**
     * 通过连接池获取HttpClient
     */
    private static CloseableHttpClient getHttpClient() {
        // 初始化
        init();
        // 返回httpclient
        return HttpClients.custom().setConnectionManager(cm).build();
    }

    /**
     * get请求
     */
    public static String httpGetRequest(String url) {

        return httpGetRequest(url, null, null);
    }

    /**
     * get请求,参数
     */
    public static String httpGetRequest(String url, Map<String, Object> params) {

        return httpGetRequest(url, null, params);
    }


    /**
     * get请求,请求头
     */
    public static String httpGetRequest(String url, HashMap<String, Object> headers) {

        return httpGetRequest(url, headers, null);
    }


    /**
     * get请求,请求头 + 参数
     */
    public static String httpGetRequest(String url, Map<String, Object> headers, Map<String, Object> params) {
        HttpGet httpGet = null;
        try {
            URIBuilder ub = new URIBuilder(url);

            if (!Objects.isNull(params)) {
                ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
                ub.setParameters(pairs);
            }
            httpGet = new HttpGet(ub.build());
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        if (!Objects.isNull(headers)) {
            for (Map.Entry<String, Object> header : headers.entrySet()) {
                httpGet.addHeader(header.getKey(), String.valueOf(header.getValue()));
            }
        }

        return getResultOfString(httpGet);
    }


    /**
     * post请求
     */
    public static String httpPostRequest(String url) {
        return httpPostRequest(url, null, null, null);
    }

    /**
     * post请求,请求头
     */
    public static String httpPostRequest(String url, HashMap<String, Object> headers) {
        return httpPostRequest(url, headers, null, null);
    }

    /**
     * post请求,json体
     */
    public static String httpPostRequest(String url, String jsonStrBody) {
        return httpPostRequest(url, null, null, jsonStrBody);
    }


    /**
     * post请求,formdata参数
     */
    public static String httpPostRequest(String url, Map<String, Object> params) {
        return httpPostRequest(url, null, params, null);
    }

    /**
     * post请求,请求头 + json体
     */
    public static String httpPostRequest(String url, HashMap<String, Object> headers, String jsonStrBody) {
        return httpPostRequest(url, headers, null, jsonStrBody);
    }


    /**
     * post请求,请求头 + formdata参数
     */
    public static String httpPostRequest(String url, HashMap<String, Object> headers, Map<String, Object> params) throws Exception {
        return httpPostRequest(url, headers, params, null);
    }


    /**
     * post请求汇总方法:请求头,formdata参数,jsonbody参数
     */
    private static String httpPostRequest(String url, Map<String, Object> headers, Map<String, Object> params, String jsonStrBody) {
        HttpPost httpPost = new HttpPost(url);

        if (!Objects.isNull(headers)) {
            for (Map.Entry<String, Object> param : headers.entrySet()) {
                httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
            }
        }
        if (!Objects.isNull(params)) {
            ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
            try {
                httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        if (!Objects.isNull(jsonStrBody)) {
            StringEntity se = new StringEntity(jsonStrBody, UTF_8);
            se.setContentType(String.valueOf(ContentType.APPLICATION_JSON));
            httpPost.setEntity(se);
        }
        return getResultOfString(httpPost);
    }


    /**
     * 处理Http请求,获取String结果
     */
    private static String getResultOfString(HttpRequestBase request) {
        CloseableHttpClient httpClient = getHttpClient();

        String result = null;
        try {
            CloseableHttpResponse response = httpClient.execute(request);
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                request.abort();
                return EMPTY_STR;
            }
            result = EntityUtils.toString(response.getEntity(), UTF_8);
            result = StringEscapeUtils.unescapeJava(result);
            response.close();
            //httpClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }


    /**
     * 转换成http参数对
     */
    private static ArrayList<NameValuePair> covertParams2NVPS(Map<String, Object> params) {
        ArrayList<NameValuePair> pairs = new ArrayList<>();
        for (Map.Entry<String, Object> param : params.entrySet()) {
            pairs.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue())));
        }
        return pairs;
    }
}

 

posted @ 2021-12-13 13:20  扬帆去远航  阅读(445)  评论(0)    收藏  举报