Java HttpManager 代码模版

160 阅读1分钟
import java.util.concurrent.TimeUnit;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.http.client.config.RequestConfig;
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.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HttpManager {

    private static final Logger LOGGER = LoggerFactory.getLogger(HttpManager.class);
    public static final String HTTP_APPLICATION_JSON = "application/json";
    public static final int HTTP_SUCCESS_CODE = 200;
    private final CloseableHttpClient httpClient;

    /**
     * construct http client
     * @param timeout - timeout setting
     * @return closeable timeout
     */
    private synchronized CloseableHttpClient constructHttpClient(int timeout) {
        if (httpClient != null) {
            return httpClient;
        }
        long timeoutInMs = TimeUnit.SECONDS.toMillis(timeout);
        RequestConfig requestConfig = RequestConfig.custom()
            .setConnectTimeout((int) timeoutInMs)
            .setSocketTimeout((int) timeoutInMs).build();
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        httpClientBuilder.setDefaultRequestConfig(requestConfig);
        return httpClientBuilder.build();
    }

    public HttpManager(int timeout) {
        httpClient = constructHttpClient(timeout);
    }

    public String doSentPost(String url, Object dto) {
        try {
            HttpPost post = getHttpPost(url);
            StringEntity stringEntity = new StringEntity(toJsonStr(dto));
            stringEntity.setContentType(HTTP_APPLICATION_JSON);
            post.setEntity(stringEntity);
            CloseableHttpResponse response = httpClient.execute(post);
            String returnStr = EntityUtils.toString(response.getEntity());
            if (returnStr != null && !returnStr.isEmpty()
                && response.getStatusLine().getStatusCode() == 200) {
                LOGGER.info("request url {}, dto: {}, return str {}", url, dto, returnStr);
                return returnStr;
            }
        } catch (Exception e) {
            LOGGER.error("request url {}, request dto {} error :" + e.getMessage(), url, dto);
            return null;
        }
        return null;
    }

    public String doSendGet(String url) {
        try {
            HttpGet get = getHttpGet(url);
            CloseableHttpResponse response = httpClient.execute(get);
            String returnStr = EntityUtils.toString(response.getEntity());
            if (returnStr != null && !returnStr.isEmpty()
                && response.getStatusLine().getStatusCode() == HTTP_SUCCESS_CODE) {
                return returnStr;
            }
        } catch (Exception e) {
            LOGGER.error("request url {} error :" + e.getMessage(), url);
            return null;
        }
        return null;
    }

    /**
     * get http post, the tauth params should be passed
     * @param url
     * @return
     */
    private HttpPost getHttpPost(String url) {
        HttpPost httpPost = new HttpPost(url);
        return httpPost;
    }

    /**
     * get http get, the tauth params should be passed
     * @param url
     * @return
     */
    private HttpGet getHttpGet(String url) {
        HttpGet httpGet = new HttpGet(url);
        return httpGet;
    }


    private String toJsonStr(Object obj) {
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setPrettyPrinting();
        Gson gson = gsonBuilder.create();
        return gson.toJson(obj);
    }
}