HttpUtil 參考別人寫的

package org.apache.util;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.CodingErrorAction;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import org.apache.http.Consts;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.ConnectionConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.config.SocketConfig;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
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.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
public class HttpUtil {
 //mime=type
 public static final String MIME_TYPE_PLAIN="text/plain";
 public static final String MIME_TYPE_XML="text/xml";
 public static final String MIME_TYPE_HTML="text/html";
 public static final String MIME_TYPE_JSON="application/json";
 
 //request method
 public static final String METHOD_GET="GET";
 public static final String METHOD_POST="POST";
 
 //http status
 public static final int HTTP_RESSTATUS_SUCCESS=200;
 public static final int HTTP_RESSTATUS_FOUND=404;
 
 public static final String DEFAULT_ENCODING="UTF-8";
 
 public static final Charset DEFAULT_CONSTS=Consts.UTF_8;
 public static final int REQUEST_TIMEOUT=5000;
 public static final int CONNECTION_TIMEOUT=5000;
 public static final int SO_TIME_OUT_MS = 5000;
 public static final int SOCKIT_TIMEOUT=5000;
 public static final int POOL_MAX_SIZE=200;
 public static final int POOL_MAX_SIZE_PRE_REUTER=200;
 public static CloseableHttpClient httpClient=null;
 
 private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = null;  
 
 static{
  try {
   //初始化SSL
   SSLContextBuilder sslContextBuilder=new SSLContextBuilder();
   sslContextBuilder.useTLS();
   SSLContext sslContext=sslContextBuilder.loadTrustMaterial(null, new TrustStrategy() {
    // 容許經過全部
    @Override
    public boolean isTrusted(X509Certificate[] chain, String authType)
      throws CertificateException {
     return true;
    }
   }).build();
   //註冊協議
   ConnectionSocketFactory plainCSF=PlainConnectionSocketFactory.INSTANCE;
   ConnectionSocketFactory sslCSF=new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
   Registry<ConnectionSocketFactory> registry=RegistryBuilder.<ConnectionSocketFactory>create().register("http", plainCSF).register("https", sslCSF).build();
   //建立鏈接池
   poolingHttpClientConnectionManager=new PoolingHttpClientConnectionManager(registry);
   // 初始化Socket配置
   SocketConfig socketConfig=SocketConfig.custom().setTcpNoDelay(true).setSoTimeout(SO_TIME_OUT_MS).build();
   poolingHttpClientConnectionManager.setDefaultSocketConfig(socketConfig);
   
   // http鏈接設置 
   ConnectionConfig connectionConfig=ConnectionConfig.custom() .setCharset(DEFAULT_CONSTS) .setMalformedInputAction(CodingErrorAction.IGNORE) .setUnmappableInputAction(CodingErrorAction.IGNORE).build();
   poolingHttpClientConnectionManager.setDefaultConnectionConfig(connectionConfig);
   poolingHttpClientConnectionManager.setMaxTotal(POOL_MAX_SIZE);
   poolingHttpClientConnectionManager.setDefaultMaxPerRoute(POOL_MAX_SIZE_PRE_REUTER);
   
   RequestConfig requestConfig=RequestConfig.custom()
     .setConnectionRequestTimeout(REQUEST_TIMEOUT)
     .setSocketTimeout(SOCKIT_TIMEOUT)
     .setConnectTimeout(CONNECTION_TIMEOUT)
     .build();
   //建立HttpClient  
   httpClient=HttpClients.custom()
     .disableAuthCaching()
     .setConnectionManager(poolingHttpClientConnectionManager)
     .setDefaultRequestConfig(requestConfig)
     .build();
   HttpConnMonitorThread monitor=new HttpConnMonitorThread(poolingHttpClientConnectionManager);
   new Thread(monitor).start();
   monitor.shutdown();
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   if(httpClient!=null){
    try {
     httpClient.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
 
}


package org.apache.util;
import java.util.concurrent.TimeUnit;
import org.apache.http.conn.HttpClientConnectionManager;
public class HttpConnMonitorThread implements Runnable{
 private final HttpClientConnectionManager cm;
 private volatile boolean shutdown;
 
 private final static int WATING_TIME=60000;
 private final static int IDLE_TIME=30;
 
 public HttpConnMonitorThread(HttpClientConnectionManager cm){
  super();
  this.cm=cm;
 }
 @Override
 public void run() {
  try {
   while (shutdown) {
    synchronized (this) {
     wait(WATING_TIME);
     cm.closeExpiredConnections();
     cm.closeIdleConnections(IDLE_TIME, TimeUnit.SECONDS);
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 public void shutdown(){
  shutdown=true;
  synchronized (this) {
   notifyAll();
  }
 }
}   

/**
  * get 提交方式
  * 
  * @param uri
  * @param map
  * @return
  */
 public static String doGet(String uri, Map<String, String> map) {
  String responseString = null;
  HttpResponse response=null;
  HttpGet httpGet=null;
  try {
   RequestConfig requestConfig =requestConfig();
   StringBuilder sb = new StringBuilder();
   sb.append(uri);
   int i = 0;
   for (Entry<String, String> entry : map.entrySet()) {
    if (i == 0&&!uri.contains("?")) {
     sb.append("?");
    } else {
     sb.append("&");
    }
    sb.append(entry.getKey());
    sb.append("=");
    String value = entry.getValue();
    sb.append(URLEncoder.encode(value, "UTF-8"));
    i++;
   }
   httpGet = new HttpGet(sb.toString());
   httpGet.setConfig(requestConfig);
   response = httpClient.execute(httpGet);
   HttpEntity httpEntity = response.getEntity();
   responseString = EntityUtils.toString(httpEntity);
   
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   if(response!=null){
    EntityUtils.consumeQuietly(response.getEntity());
   }if(httpGet!=null){
    httpGet.releaseConnection();
   }
  }
  return responseString;
 }
 /**
  * post 提交方式
  * @param uri
  * @param map
  * @return responseString
  */
 public static String doPost(String uri,Map<String, String> map) {
  String responseString = null;
  HttpResponse response=null;
  HttpPost httpPost=new HttpPost(uri);
  try {
   RequestConfig requestConfig=requestConfig();
   List<NameValuePair> formParams=new ArrayList<NameValuePair>();
   httpPost.setConfig(requestConfig);
   for (Map.Entry<String, String> entry:map.entrySet()) {
    formParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
   }
   httpPost.setEntity(new UrlEncodedFormEntity(formParams,Consts.UTF_8));
   response=httpClient.execute(httpPost);
   
   HttpEntity httpEntity = response.getEntity();
   
   responseString = EntityUtils.toString(httpEntity,Consts.UTF_8);
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   if(response!=null){
    EntityUtils.consumeQuietly(response.getEntity());
   }
   if(httpPost!=null){
    httpPost.releaseConnection();
   }
  }
  return responseString;
 }
 
 /**
  * json 提交方式
  * @param uri
  * @param map
  * @return responseString
  */
 public static String  doJson(String uri,Map<String, Object> map){
  String responseString = null;
  HttpResponse response=null;
  HttpPost httpPost=new HttpPost(uri);
  try {
   httpPost.setHeader("Content-type", "application/json");
   RequestConfig requestConfig=requestConfig();
   httpPost.setConfig(requestConfig);
   String str="json";
   StringEntity reqEntity = new StringEntity(str,Consts.UTF_8);
   httpPost.setEntity(reqEntity);
   response=httpClient.execute(httpPost);
   HttpEntity httpEntity = response.getEntity();
   responseString=EntityUtils.toString(httpEntity,Consts.UTF_8);
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   if(response!=null){
    EntityUtils.consumeQuietly(response.getEntity());
   }
   if(httpPost!=null){
    httpPost.releaseConnection();
   }
  }
  
  return responseString;
  
 }
 
 /**
  * Request Config 設置
  * @return RequestConfig
  */
 public static RequestConfig requestConfig() {
  RequestConfig requestConfig = RequestConfig.custom()
    .setSocketTimeout(CONNECTION_TIMEOUT)
    .setConnectTimeout(CONNECTION_TIMEOUT)
    .setConnectionRequestTimeout(CONNECTION_TIMEOUT).build();
  return requestConfig;
 }
相關文章
相關標籤/搜索