zoukankan      html  css  js  c++  java
  • java信任所有证书

    package com.eeepay.cashOut.util;
    
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.SocketTimeoutException;
    import java.net.URL;
    import java.security.KeyManagementException;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import javax.net.ssl.SSLContext;
    
    import org.apache.commons.io.IOUtils;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpUriRequest;
    import org.apache.http.conn.ConnectTimeoutException;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.conn.ssl.SSLContextBuilder;
    import org.apache.http.conn.ssl.TrustStrategy;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    
    import com.alibaba.fastjson.JSONObject;
    
    /**
     * 
     * @author ws
     *
     */
    public class HttpClientUtil {
    
    	private static final Log log = LogFactory.getLog(HttpClientUtil.class);
    	private static final String utf8 = "UTF-8";
    	
    	private String requestEncoding;
    	private String responseEncoding;
    	private String requesParamstEncoding;
    	
    	public HttpClientUtil() {
    		super();
    		this.requestEncoding = utf8;
    		this.responseEncoding = utf8;
    		this.requesParamstEncoding = utf8;
    	}
    	
    	public HttpClientUtil(String requestEncoding, String responseEncoding, String requesParamstEncoding) {
    		super();
    		this.requestEncoding = requestEncoding;
    		this.responseEncoding = responseEncoding;
    		this.requesParamstEncoding = requesParamstEncoding;
    	}
    	public HttpClientUtil( String responseEncoding) {
    		super();
    		this.requestEncoding = utf8;
    		this.responseEncoding = responseEncoding;
    		this.requesParamstEncoding = utf8;
    	}
    	
    	public String getRequestEncoding() {
    		return requestEncoding;
    	}
    
    	public void setRequestEncoding(String requestEncoding) {
    		this.requestEncoding = requestEncoding;
    	}
    
    	public String getResponseEncoding() {
    		return responseEncoding;
    	}
    
    	public void setResponseEncoding(String responseEncoding) {
    		this.responseEncoding = responseEncoding;
    	}
    
    	public String getRequesParamstEncoding() {
    		return requesParamstEncoding;
    	}
    
    	public void setRequesParamstEncoding(String requesParamstEncoding) {
    		this.requesParamstEncoding = requesParamstEncoding;
    	}
    
    	/**
    	 * 直接访问URL,可以自主设置是否以POST方式访问
    	 * @param finalUrl URL
    	 * @param post 访问方式,是否是Post访问
    	 * @return
    	 * @author Lumia_Zeng
    	 * @date 2016年10月24日 上午10:00:11
    	 */
    	public Map<String, String> baseAccessURL(String finalUrl, boolean post) {
    		Map<String, String> map = new HashMap<String, String>();
    		String msg = "访问接口失败";
    		String exceptionMsg = null;
    		map.put("success", "false");
    		log.info("URL路径:" + finalUrl);
    		
    		RequestConfig config = RequestConfig.custom().setSocketTimeout(40000).setConnectTimeout(40000).setConnectionRequestTimeout(40000).build();
    		Long startTime = System.currentTimeMillis();
    		CloseableHttpClient httpclient = createCloseableHttpClient(finalUrl,config);
    		HttpUriRequest httpMethod = null;
    		if(post){
    			HttpPost pMethod = new HttpPost(finalUrl);
    			pMethod.setConfig(config);
    			httpMethod = pMethod;
    		}else{
    			HttpGet gMethod = new HttpGet(finalUrl);
    			gMethod.setConfig(config);
    			httpMethod = gMethod;
    		}
    		
    		try {
    			HttpResponse resp = httpclient.execute(httpMethod);
    			Long endTime = System.currentTimeMillis();
    			log.info("耗时 "+(endTime-startTime) +" 毫秒");
    			Integer statusCode = resp.getStatusLine().getStatusCode();
    			String respContent = IOUtils.toString(resp.getEntity().getContent(), responseEncoding);
    			respContent = respContent==null ? "" : respContent;
    			map.put("success", "true");
    			msg = "访问接口成功";
    			map.put("responseBody", respContent);
    			map.put("responseStatusCode", statusCode.toString());
    		} catch (UnsupportedEncodingException e) {
    			exceptionMsg = "不支持的编码格式!";
    			e.printStackTrace();
    		} catch (ClientProtocolException e) {
    			exceptionMsg = "ClientProtocolException";
    			e.printStackTrace();
    		} catch (IOException e) {
    			exceptionMsg = "IOException";
    			e.printStackTrace();
    		} catch (IllegalStateException e) {
    			exceptionMsg = "IllegalStateException";
    			e.printStackTrace();
    		} catch (Exception e) {
    			exceptionMsg = "Exception";
    			e.printStackTrace();
    		}
    		map.put("msg", msg);
    		map.put("exceptionMsg", exceptionMsg);
    		return map;
    	}
    	
    	/**
    	 * 以POST方式访问URL,参数以JSON形式传递
    	 * @param finalUrl
    	 * @param params
    	 * @return
    	 * @author Lumia_Zeng
    	 * @date 2016年10月27日 下午4:07:49
    	 */
    	public Map<String, String> baseAccessURLJSON(String finalUrl,Map<String,String> params) {
    		return accessURL(finalUrl, params,true);
    	}
    	
    	/**
    	 * 以POST方式访问URL
    	 * @param finalUrl url
    	 * @param params 参数
    	 * @return
    	 * @author Lumia_Zeng
    	 * @date 2016年10月27日 下午4:07:02
    	 */
    	public Map<String, String> baseAccessURL(String finalUrl,Map<String,String> params) {
    		return accessURL(finalUrl, params,false);
    	}
    	
    	/**
    	 * 访问URL,带参数
    	 * @param finalUrl URL
    	 * @param params 参数
    	 * @param isJson 是否以JSON方式传递参数
    	 * @return
    	 * @author Lumia_Zeng
    	 * @date 2016年10月24日 上午10:02:50
    	 */
    	public Map<String, String> accessURL(String finalUrl,Map<String,String> params,boolean isJson) {
    		Map<String, String> map = new HashMap<String, String>();
    		String msg = "访问接口失败";
    		String exceptionMsg = null;
    		map.put("success", "false");
    		
    		log.info("baseAccessURL:" + finalUrl);
    		Long startTime = System.currentTimeMillis();
    		
    		RequestConfig config = RequestConfig.custom().setSocketTimeout(40000).setConnectTimeout(40000).setConnectionRequestTimeout(40000).build();
    		HttpClient httpclient;
    		httpclient= createCloseableHttpClient(finalUrl,config);
    		HttpUriRequest httpMethod = null;
    		HttpPost pMethod = new HttpPost(finalUrl);
    		pMethod.setConfig(config);
    		
    		try {
    			if(isJson && params!=null){
    				pMethod.addHeader("Content-Type", "application/json; charset=" + requestEncoding);
    				String strParams = JSONObject.toJSONString(params);
    				//log.info("JSON参数:" + strParams);
    				StringEntity entity = new StringEntity(strParams, requesParamstEncoding);
    				pMethod.setEntity(entity);
    			}else{
    				List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
    				if(params != null){
    					Set<String> set = params.keySet();
    					for (String key : set) {
    						nvps.add(new BasicNameValuePair(key, params.get(key)));
    					}
    				}
    				log.info("参数:" + nvps);
    				pMethod.setEntity(new UrlEncodedFormEntity(nvps, requesParamstEncoding));
    			}
    			
    			httpMethod = pMethod;
    			HttpResponse resp = httpclient.execute(httpMethod);
    			Integer statusCode = resp.getStatusLine().getStatusCode();
    			String respContent = IOUtils.toString(resp.getEntity().getContent(), responseEncoding);
    			respContent = respContent==null ? "" : respContent;
    			map.put("success", "true");
    			msg = "访问接口成功";
    			map.put("responseBody", respContent);
    			map.put("responseStatusCode", statusCode.toString());
    		} catch (ConnectTimeoutException e) {
    			exceptionMsg = "ConnectTimeoutException";
    			e.printStackTrace();
    		} catch (SocketTimeoutException e) {
    			exceptionMsg = "SocketTimeoutException";
    			e.printStackTrace();
    		} catch (UnsupportedEncodingException e) {
    			exceptionMsg = "UnsupportedEncodingException";
    			e.printStackTrace();
    		} catch (ClientProtocolException e) {
    			exceptionMsg = "ClientProtocolException";
    			e.printStackTrace();
    		} catch (IOException e) {
    			exceptionMsg = "IOException";
    			e.printStackTrace();
    		} catch (IllegalStateException e) {
    			exceptionMsg = "IllegalStateException";
    			e.printStackTrace();
    		} catch (Exception e) {
    			exceptionMsg = "Exception";
    			e.printStackTrace();
    		} finally {
    			Long endTime = System.currentTimeMillis();
    			log.info("耗时 "+(endTime-startTime) +" 毫秒");
    		}
    		map.put("msg", msg);
    		map.put("exceptionMsg", exceptionMsg);
    		return map;
    	}
    	/***
    	 * 传入JSON数据,以输出流的方式,发送请求
    	 * @param urlStr 目标地址
    	 * @param jsonStr JSON数据
    	 * @param isPost 是否POST
    	 * @return
    	 * @author Lumia_Zeng
    	 * @date 2016年11月1日 下午2:55:10
    	 */
    	public Map<String, String> accessURLByJsonStream(String urlStr, String jsonStr, boolean isPost) {
    		log.info(String.format("以JSON方式访问:%s;是否POST:%s;参数:%s",urlStr,isPost,jsonStr));
    		Map<String, String> map = new HashMap<String, String>();
    		String msg = "访问接口失败";
    		String exceptionMsg = null;
    		map.put("success", "false");
    		try {
    			URL url = new URL(urlStr);
    			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    			connection.setDoOutput(true);
    			connection.setDoInput(true);
    			if (isPost) {
    				connection.setRequestMethod("POST");
    			}
    			connection.setUseCaches(false);
    			connection.setInstanceFollowRedirects(true);
    			connection.setRequestProperty("Content-Type", "application/json; charset=" + requestEncoding);
    			connection.connect();
    			// POST请求
    			DataOutputStream out = new DataOutputStream(connection.getOutputStream());
    			out.write(jsonStr.getBytes(requesParamstEncoding));
    			out.flush();
    			out.close();
    			// 读取响应
    			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    			StringBuilder sb = new StringBuilder("");
    			String lines;
    			while ((lines = reader.readLine()) != null) {
    				lines = new String(lines.getBytes(), responseEncoding);
    				sb.append(lines);
    			}
    			reader.close();
    			Integer statusCode = connection.getResponseCode();
    			// 断开连接
    			connection.disconnect();
    			map.put("success", "true");
    			msg = "访问接口成功";
    			map.put("responseBody", sb.toString());
    			map.put("responseStatusCode", statusCode.toString());
    		} catch (MalformedURLException e) {
    			exceptionMsg = e.getMessage();
    			e.printStackTrace();
    		} catch (UnsupportedEncodingException e) {
    			exceptionMsg = e.getMessage();
    			e.printStackTrace();
    		} catch (IOException e) {
    			exceptionMsg = e.getMessage();
    			e.printStackTrace();
    		} catch (Exception e) {
    			exceptionMsg = e.getMessage();
    			e.printStackTrace();
    		} finally {
    			map.put("msg", msg);
    			map.put("exceptionMsg", exceptionMsg);
    		}
    		return map;
    	}
    	
    	/**
    	 * 
    	 * @param finalUrl
    	 * @param config
    	 * @return
    	 */
    	private CloseableHttpClient createCloseableHttpClient(String finalUrl,RequestConfig config){
        	HttpClientBuilder builder = HttpClients.custom();
        	builder.setDefaultRequestConfig(config);
        	if (finalUrl.startsWith("https")) {
        		try {
        			SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
        				// 信任所有
        				public boolean isTrusted(java.security.cert.X509Certificate[] chain, String authType) {
        					return true;
        				}
        			}).build();
        			SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        			builder.setSSLSocketFactory(sslsf);
        		} catch (KeyManagementException e) {
        			e.printStackTrace();
        		} catch (NoSuchAlgorithmException e) {
        			e.printStackTrace();
        		} catch (KeyStoreException e) {
        			e.printStackTrace();
        		} catch (Exception e) {
        			e.printStackTrace();
        		}
        	}
    		return builder.build();
    	}
    	
    	
    }
    

      

  • 相关阅读:
    UVA 11235 (游程编码+ST算法)
    CodeForces 359D (数论+二分+ST算法)
    线性动态规划
    AC自动机
    KMP
    字典树
    Treap和名次树
    线段树
    最小生成树
    【VS】使用vs2017自带的诊断工具(Diagnostic Tools)诊断程序的内存问题
  • 原文地址:https://www.cnblogs.com/I-will-be-different/p/8615430.html
Copyright © 2011-2022 走看看