HttpUtil

来源:互联网 发布:淘宝店铺卖充值好吗 编辑:程序博客网 时间:2024/05/17 22:06

SecurityClientUtils.java

httpclient 4.x 版本

import org.apache.commons.lang3.StringUtils;import org.apache.http.Consts;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.HttpPost;import org.apache.http.config.SocketConfig;import org.apache.http.entity.ByteArrayEntity;import org.apache.http.entity.ContentType;import org.apache.http.entity.mime.HttpMultipartMode;import org.apache.http.entity.mime.MultipartEntityBuilder;import org.apache.http.entity.mime.content.ByteArrayBody;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.entity.mime.content.StringBody;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.slf4j.MDC;import java.io.*;import java.nio.charset.Charset;import java.util.Map;public class SecurityClientUtils {    private static final Logger log = LoggerFactory.getLogger("HTTP");    private volatile static SecurityClientUtils securityClientUtils;    private PoolingHttpClientConnectionManager poolingManager;    private SecurityClientUtils() {        poolingManager = new PoolingHttpClientConnectionManager();        poolingManager.setMaxTotal(50);        poolingManager.setDefaultMaxPerRoute(50);        SocketConfig socketConfig = SocketConfig.custom().setSoTimeout(10 * 1000).build();        poolingManager.setDefaultSocketConfig(socketConfig);    }    public static SecurityClientUtils getInstance() {        if (securityClientUtils == null) {            synchronized (HttpClientUtils.class) {                if (securityClientUtils == null) {                    securityClientUtils = new SecurityClientUtils();                }            }        }        return securityClientUtils;    }    public static String postMapToString(Map<String, String> params) {        return JsonMapper.writeObjctToString(params);    }    private CloseableHttpClient getConnection() {        RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(10 * 1000)                .setConnectTimeout(10 * 1000).setSocketTimeout(10 * 1000).build();        if (poolingManager != null && poolingManager.getTotalStats() != null) {            log.debug("now client pool have {} ", poolingManager.getTotalStats());        }        return HttpClients.custom()                .setConnectionManager(poolingManager).setDefaultRequestConfig(requestConfig).build();    }    private HttpPost buildSecurityPost(String url) {        HttpPost post = new HttpPost(url);        post.setHeader("isEncrypt", "true");        post.setHeader("Content-Type", "application/json;charset=UTF-8");        return post;    }    private ByteArrayEntity doEncrypt(String json) {        byte[] encrypt = CommonSecurityUtil.encryptjString(json);        return new ByteArrayEntity(encrypt);    }    public HttpTextResponse postJson(String url, String json) {        HttpPost post = buildSecurityPost(url);        HttpTextResponse httpTextResponse = new HttpTextResponse();        handlerTrace(post);        try {            CloseableHttpClient client = getConnection();            post.setEntity(doEncrypt(json));            HttpResponse response = client.execute(post);            httpTextResponse = parseHttpResponse(response);        } catch (Exception e) {            log.error("[SecurityClientUtils][postJson][occur error]", e);            buildFailHttpTextResponse(httpTextResponse, GlobalConstants.NETWORK_EXCEPTION, "network fail");        } finally {            post.releaseConnection();        }        return httpTextResponse;    }    public HttpTextResponse exePostFormMethod(String url, Map<String, String> params) {        HttpPost post = new HttpPost(url);        post.setHeader("isEncrypt", "true");        post.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");        handlerTrace(post);        HttpTextResponse httpTextResponse = new HttpTextResponse();        try {            CloseableHttpClient client = getConnection();            String paramStr = postMapToString(params);            byte[] encrypt = CommonSecurityUtil.encryptjString(paramStr);            ByteArrayEntity entity = new ByteArrayEntity(encrypt);            post.setEntity(entity);            HttpResponse response = client.execute(post);            httpTextResponse = parseHttpResponse(response);        } catch (Exception e) {            log.error("[SecurityClientUtils][exePostFormMethod][occur error]", e);            buildFailHttpTextResponse(httpTextResponse, GlobalConstants.NETWORK_EXCEPTION, "network fail");        } finally {            post.releaseConnection();        }        return httpTextResponse;    }    public HttpTextResponse postFile(String url, File file, Map<String, String> params){        HttpPost post = new HttpPost(url);        HttpTextResponse httpTextResponse = new HttpTextResponse();        handlerTrace(post);        try{            String paramStr = postMapToString(params);            MultipartEntityBuilder builder = MultipartEntityBuilder.create();            builder.addPart("file", new FileBody(file));            builder.addPart("params", new StringBody(paramStr, ContentType.create("text/plain", Consts.UTF_8)));            HttpEntity entity = builder.build();            post.setEntity(entity);            CloseableHttpClient client = getConnection();            HttpResponse response = client.execute(post);            httpTextResponse = parseHttpResponse(response);        } catch (Exception e){            log.error("msg=postFileError", e);            buildFailHttpTextResponse(httpTextResponse, GlobalConstants.NETWORK_EXCEPTION, "network fail");        }finally {            post.releaseConnection();        }        return httpTextResponse;    }    private HttpTextResponse parseHttpResponse(HttpResponse response) {        HttpTextResponse httpTextResponse = new HttpTextResponse();        int responseCode = response.getStatusLine().getStatusCode();        httpTextResponse.setCode(responseCode);        HttpEntity responseEntity = response.getEntity();        httpTextResponse.setResponseBody(getResponseContent(responseEntity));        return httpTextResponse;    }    private String getResponseContent(HttpEntity responseEntity) {        StringBuilder bf = new StringBuilder();        if (responseEntity != null) {            try {                BufferedReader reader = new BufferedReader(new InputStreamReader(responseEntity.getContent(), "UTF-8"));                String line = null;                while ((line = reader.readLine()) != null) {                    bf.append(line);                }            } catch (IOException e) {                log.error(e.getMessage(), e);            }        }        return bf.toString();    }    /**     * 发送前处理trace参数     *     * @param post     * @return     */    private void handlerTrace(HttpPost post) {        try{            if(post == null){                return;            }            String traceId = MDC.get(GlobalConstants.TRACEID);            if(!StringUtils.isBlank(traceId)){                post.setHeader(GlobalConstants.TRACEID, traceId);            }        }catch (Exception e){            log.error("msg=handlerTraceError", e);        }    }    private void buildFailHttpTextResponse(HttpTextResponse httpTextResponse, String code, String failMsg) {        httpTextResponse.setCode(Integer.valueOf(code));        httpTextResponse.setResponseBody(failMsg);    }}

HttpClientUtils.java

http 3.x 版本

import org.apache.commons.httpclient.Cookie;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpConnectionManager;import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.RequestEntity;import org.apache.commons.httpclient.methods.StringRequestEntity;import org.apache.commons.httpclient.params.HttpConnectionManagerParams;import org.apache.commons.httpclient.params.HttpMethodParams;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.slf4j.MDC;import javax.xml.ws.http.HTTPException;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.util.Iterator;import java.util.Map;/** * Created by hanhaiwen on 22/02/2016. * <p/> * copy from lego core */public class HttpClientUtils {    private static final Logger logger = LoggerFactory.getLogger(HttpClientUtils.class);    private volatile static HttpClientUtils httpClientUtils;    private String DEFAULT_CHARSET = "UTF-8";    private HttpClient httpClient;    public HttpClientUtils() {        httpClient = new HttpClient();        HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();        HttpConnectionManagerParams params = new HttpConnectionManagerParams();        params.setConnectionTimeout(10 * 1000);//连接超时时间        params.setSoTimeout(10 * 1000);//socket获取数据时间        params.setDefaultMaxConnectionsPerHost(50);        params.setMaxTotalConnections(50);        httpConnectionManager.setParams(params);        httpClient.setHttpConnectionManager(httpConnectionManager);        httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, DEFAULT_CHARSET);    }    public static HttpClientUtils getInstance() {        if (httpClientUtils == null) {            synchronized (HttpClientUtils.class) {                if (httpClientUtils == null) {                    httpClientUtils = new HttpClientUtils();                }            }        }        return httpClientUtils;    }    public String doGet(String url, Map<String, String> headerMap) {        return exeGetMethod(url, DEFAULT_CHARSET, null, headerMap);    }    /**     * 执行post请求,数据格式为form     *     * @param url     * @param params     * @return     */    public HttpTextResponse exePostFormMethod(String url, Map<String, String> params) {        return exePostFormMethod(httpClient, url, params, null);    }    /**     * 执行post请求,数据格式为form     *     * @param client     * @param url     * @param params     * @return     */    private HttpTextResponse exePostFormMethod(HttpClient client, String url, Map<String, String> params, Cookie[] cookies) {        logger.info("[post请求][url:{}][params:{}]", url, JsonMapper.writeObjctToString(params));        PostMethod post = new PostMethod(url);        if (cookies != null) {            client.getState().addCookies(cookies);        }        post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");        for (String key : params.keySet()) {            String value = params.get(key);            post.addParameter(key, value);        }        HttpTextResponse response = null;        try {            int code = client.executeMethod(post);            logger.info("[post请求结果][url:{}][code:{}]", url, code);            response = new HttpTextResponse(code, post, false);        } catch (Exception e) {            String msg = String.format("[系统错误][执行post请求发生错误:{%s},url:{%s},params:{%s}]",                    e.getMessage(), url, JsonMapper.writeObjctToString(params));            logger.error(msg, e);            response = HttpTextResponse.buildFailedResponse(GlobalConstants.API_CODE_BADSERVER, msg);        } finally {            post.releaseConnection();        }        return response;    }    private String exeGetMethod(String url, String charset, Cookie[] cookies,                                Map<String, String> headerMap) {        GetMethod method = new GetMethod(url);        charset = charset == null ? DEFAULT_CHARSET : charset;        logger.info("[exeGetMethod] [url:{}] [charset:{}] [cookies:{}] [headerMap:{}]",                url, charset == null ? DEFAULT_CHARSET : charset,                (cookies == null ? "null" : JsonMapper.writeObjctToString(cookies)),                (headerMap == null ? "null" : JsonMapper.writeObjctToString(headerMap)));        if (headerMap != null) {            Iterator entries = headerMap.entrySet().iterator();            while (entries.hasNext()) {                Map.Entry entry = (Map.Entry) entries.next();                method.setRequestHeader(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));            }        }        if (cookies != null) {            httpClient.getState().addCookies(cookies);        }        try {            int code = httpClient.executeMethod(method);            String result = "";            if (code == 200) {                BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset));                StringBuffer bf = new StringBuffer();                String line = "";                while ((line = reader.readLine()) != null) {                    bf.append(line);                }                result = bf.toString();                logger.debug("======>HttpRequest,url:{} ,result:{}", url, result);                return result;            } else {                logger.warn("[exeGetMethod][" + url + "][server response status code " +                        "is not 200]");                return null;            }        } catch (IOException e) {            e.printStackTrace();        } catch (HTTPException e) {            e.printStackTrace();        } finally {            method.releaseConnection();        }        return null;    }    public <T> HttpTextResponse postJson(String url, T data, Cookie[] cookies) {        logger.info("[post请求][url:{}][params:{}]", url, JsonMapper.writeObjctToString(data));        PostMethod post = new PostMethod(url);        if (cookies != null) {            httpClient.getState().addCookies(cookies);        }        try {            RequestEntity requestEntity = new StringRequestEntity(JsonMapper.writeObjctToString(data), "application/json;charset=UTF-8", "UTF-8");            post.setRequestEntity(requestEntity);        } catch (UnsupportedEncodingException e) {            ;        }        HttpTextResponse response = null;        try {            int code = httpClient.executeMethod(post);            logger.info("[post请求结果][url:{}][code:{}]", url, code);            response = new HttpTextResponse(code, post, false);        } catch (Exception e) {            String msg = String.format("[系统错误][执行post请求发生错误:{%s},url:{%s},json:{%s}]",                    e.getMessage(), url, JsonMapper.writeObjctToString(data));            logger.error(msg, e);            response = HttpTextResponse.buildFailedResponse(GlobalConstants.API_CODE_BADSERVER, msg);        } finally {            post.releaseConnection();        }        return response;    }}

HttpTextResponse.java

import org.apache.commons.httpclient.Header;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.lang3.builder.ToStringBuilder;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class HttpTextResponse {    private static final Logger log = LoggerFactory.getLogger(HttpTextResponse.class);    private int code; // 状态码 200 400    private String responseBody; // body    private Header[] headers; // headers    private byte[] responseBytes;    public HttpTextResponse() {    }    public HttpTextResponse(int code, String responseBody, Header[] headers) {        this.code = code;        this.responseBody = responseBody;        this.headers = headers;    }    public HttpTextResponse(int code, HttpMethod method) {        this(code, method, false);    }    public HttpTextResponse(int code, HttpMethod method, boolean needHeaders) {        if (!method.isRequestSent()) {            throw new IllegalArgumentException("request尚未发送,无法获取response");        }        this.code = code;        StringBuffer bf = new StringBuffer();        BufferedReader reader = null;        try {            reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), "UTF-8"));            String line = null;            while ((line = reader.readLine()) != null) {                bf.append(line);            }        } catch (IOException e) {            log.error(e.getMessage(), e);        }        this.responseBody = bf.toString();        if (needHeaders) {            this.headers = method.getResponseHeaders();        }    }    public static HttpTextResponse buildFailedResponse(String code, String msg) {        ApiResponse failApiResponse = new ApiResponse();        failApiResponse.setCode(code);        failApiResponse.setMsg(msg);        HttpTextResponse response = new HttpTextResponse();        response.setCode(500);        response.setResponseBody(JsonMapper.writeObjctToString(failApiResponse));        return response;    }    public int getCode() {        return code;    }    public void setCode(int code) {        this.code = code;    }    public String getResponseBody() {        return responseBody;    }    public void setResponseBody(String responseBody) {        this.responseBody = responseBody;    }    public Header[] getHeaders() {        return headers;    }    public void setHeaders(Header[] headers) {        this.headers = headers;    }    public byte[] getResponseBytes() {        return responseBytes;    }    public void setResponseBytes(byte[] responseBytes) {        this.responseBytes = responseBytes;    }    @Override    public String toString() {        return new ToStringBuilder(this)                .append("code", code)                .append("responseBody", responseBody)                .append("headers", headers)                .toString();    }}


0 0
原创粉丝点击