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
- HttpUtil
- HttpUtil
- httputil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- httpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil工具
- httpclient -HttpUtil
- java设计模式—建造者模式
- windows 7 64位 elixir安装
- iOS 相册多选 相机选择图片
- android studio快捷键
- C++的四舍五入函数
- HttpUtil
- UGUI源码学习之一(UI坐标系统)
- centos 6.5安装elixir
- Javscript复习第四天鼠标事件
- OPenWrt挂载U盘
- UFLDL教程——Softmax回归代价函数的梯度
- 普里姆(prim)算法
- Java语言的发展简史
- 时间复杂度和空间复杂度