package com.mandi.common;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.net.ssl.SSLContext;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
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.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

/** 
 * @author mengly 
 * @version 创建时间:2015年10月27日 上午9:59:53 
 * 类说明 
 */

public class Wxhtmethod {
	/**
	 * new ssl();
	 * @return 
	 * @author mengly 
	 * @version 创建时间:2015年10月13日 上午11:21:15
	 */
	public static CloseableHttpClient nssl() {
        CloseableHttpClient httpclient = null;  
        try {  
            SSLContext sslcontext = SSLContexts.createDefault();  
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, NoopHostnameVerifier.INSTANCE);  
            httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();  
        }catch(Exception ee){
        	ee.printStackTrace();
        }
        return httpclient;
    } 
	public static String get(String url)
	{
		 CloseableHttpClient httpclient = HttpClients.createDefault();
		 HttpGet  hp=new HttpGet(url);
		 String re=null;
		 try {
			 CloseableHttpResponse cr=null;
			cr=httpclient.execute(hp);
			 try{
				 HttpEntity he=cr.getEntity();
				 if(he!=null)
					 re=EntityUtils.toString(he,"UTF-8");
			 }catch(Exception ee)
			 {}finally{
				 cr.close();
			 }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			 try {  
	                httpclient.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	            } 
		}
		return re;
	}
	public static String ssl_get(String url)
	{
		 CloseableHttpClient httpclient =nssl();
		 HttpGet  hp=new HttpGet(url);
		 String re=null;
		 try {
			 CloseableHttpResponse cr=null;
			 cr=httpclient.execute(hp);
			 try{
				 HttpEntity he=cr.getEntity();
				 if(he!=null)
					 re=EntityUtils.toString(he,"UTF-8");
			 }catch(Exception ee)
			 {}finally{
				 cr.close();
			 }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			 try {  
	                httpclient.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	            } 
		}
		return re;
	}
	public static JsonObject postJson(String url,Map<String, String> params)
	{
		 JsonObject jo=new JsonObject();
		 CloseableHttpClient httpclient = HttpClients.createDefault();
		 HttpPost hp=new HttpPost(url);
		RequestConfig config = RequestConfig.custom().setConnectTimeout(10000).setSocketTimeout(30000).build();
		hp.setConfig(config);
		 String re=null;
		 List<NameValuePair> fps=new ArrayList<NameValuePair>();
		 UrlEncodedFormEntity entity=null;
		 if(params!=null)
		 {
			 for (Entry<String, String> en : params.entrySet()) {
				 fps.add(new BasicNameValuePair(en.getKey(), en.getValue()));
			 }
		 }
		 try {
			 entity=new UrlEncodedFormEntity(fps,"UTF-8");
			 hp.setEntity(entity);
			 CloseableHttpResponse cr=null;
			 cr= httpclient.execute(hp);
			 try{
				 int status=cr.getStatusLine().getStatusCode();
				 if(status!=200){
					 jo.addProperty("code", 1);
					 jo.addProperty("errmsg", "网络不通!,网络状态码为:"+status);
					 return jo;
				 }
				 HttpEntity he=cr.getEntity();
				 if(he!=null){
					 re=EntityUtils.toString(he,"UTF-8");
					 try{
						 JsonParser jp=new JsonParser();
						 JsonObject jo1=jp.parse(re).getAsJsonObject();
						 return jo1;
					 }catch(Exception e12){
						 jo.addProperty("code", 1);
						 jo.addProperty("errmsg", e12.getMessage());
						 return jo;
					 }
				 }
			 }catch(Exception ee){
				 jo.addProperty("code", 1);
				 jo.addProperty("errmsg", ee.getMessage());
				 return jo;
			 }finally{
				 cr.close();
			 }
		} catch (Exception e) {
			jo.addProperty("code", 1);
			jo.addProperty("errmsg", e.getMessage());
			 return jo;
		}finally{
			 try {  
	                httpclient.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	            } 
		}
		return jo;
	}
	public static JsonObject postJsonStr(String url,String jsonStr)
	{
		 JsonObject jo=new JsonObject();
		 CloseableHttpClient httpclient = HttpClients.createDefault();
		 String re=null;
		 try {
//			 StringEntity s = new StringEntity(jsonStr==null?"":jsonStr);
//			 s.setContentEncoding("UTF-8");
//			 hp.setEntity(s);
			 HttpPost hp=new HttpPost(url);
			 RequestConfig config = RequestConfig.custom().setConnectTimeout(10000).setSocketTimeout(30000).build();
			 hp.setConfig(config);
			 StringEntity se=new StringEntity(jsonStr, Charset.forName("utf-8"));
			 se.setContentType("application/json");
			 hp.setEntity(se);
			 CloseableHttpResponse cr=null;
			 cr= httpclient.execute(hp);
			 try{
				 int status=cr.getStatusLine().getStatusCode();
				 if(status!=200){
					 jo.addProperty("code", 1);
					 jo.addProperty("errmsg", "网络不通!,网络状态码为:"+status);
					 return jo;
				 }
				 HttpEntity he=cr.getEntity();
				 if(he!=null){
					 re=EntityUtils.toString(he,"UTF-8");
					 try{
						 JsonParser jp=new JsonParser();
						 JsonObject jo1=jp.parse(re).getAsJsonObject();
						 return jo1;
					 }catch(Exception e12){
						 jo.addProperty("code", 1);
						 jo.addProperty("errmsg", e12.getMessage());
						 return jo;
					 }
				 }
			 }catch(Exception ee){
				 jo.addProperty("code", 1);
				 jo.addProperty("errmsg", ee.getMessage());
				 return jo;
			 }finally{
				 cr.close();
			 }
		} catch (Exception e) {
			jo.addProperty("code", 1);
			jo.addProperty("errmsg", e.getMessage());
			 return jo;
		}finally{
			 try {  
	                httpclient.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	            } 
		}
		return jo;
	}
	
	
	public static JsonObject getJson(String url)
	{
		 JsonObject jo=new JsonObject();
		 CloseableHttpClient httpclient = HttpClients.createDefault();
		 HttpGet hp=new HttpGet(url);
		 String re=null;
		 try {
			 CloseableHttpResponse cr=null;
			 cr= httpclient.execute(hp);
			 try{
				 int status=cr.getStatusLine().getStatusCode();
				 if(status!=200){
					 jo.addProperty("code", 1);
					 jo.addProperty("errmsg", "网络不通!,网络状态码为:"+status);
					 return jo;
				 }
				 HttpEntity he=cr.getEntity();
				 if(he!=null){
					 re=EntityUtils.toString(he,"UTF-8");
					 try{
						 JsonParser jp=new JsonParser();
						 JsonObject jo1=jp.parse(re).getAsJsonObject();
						 return jo1;
					 }catch(Exception e12){
						 jo.addProperty("code", 1);
						 jo.addProperty("errmsg", e12.getMessage());
						 return jo;
					 }
				 }
			 }catch(Exception ee){
				 jo.addProperty("code", 1);
				 jo.addProperty("errmsg", ee.getMessage());
				 return jo;
			 }finally{
				 cr.close();
			 }
		} catch (Exception e) {
			jo.addProperty("code", 1);
			jo.addProperty("errmsg", e.getMessage());
			 return jo;
		}finally{
			 try {  
	                httpclient.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	            } 
		}
		return jo;
	}
	public static String post(String url,Map<String, String> params)
	{
		 CloseableHttpClient httpclient = HttpClients.createDefault();
		 HttpPost hp=new HttpPost(url);
		RequestConfig config = RequestConfig.custom().setConnectTimeout(10000).setSocketTimeout(30000).build();
		hp.setConfig(config);
		 String re=null;
		 List<NameValuePair> fps=new ArrayList<NameValuePair>();
		 UrlEncodedFormEntity entity=null;
		 if(params!=null)
		 {
			 for (Entry<String, String> en : params.entrySet()) {
				 fps.add(new BasicNameValuePair(en.getKey(), en.getValue()));
			 }
		 }
		 try {
			 entity=new UrlEncodedFormEntity(fps,"UTF-8");
			 hp.setEntity(entity);
			 CloseableHttpResponse cr=null;
			 cr= httpclient.execute(hp);
			 try{
				 HttpEntity he=cr.getEntity();
				 if(he!=null)
					 re=EntityUtils.toString(he,"UTF-8");
			 }catch(Exception ee)
			 {}finally{
				 cr.close();
			 }
		} catch (Exception e) {
		}finally{
			 try {  
	                httpclient.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	            } 
		}
		return re;
	}
	
	public static String ssl_post(String url,Map<String, String> params)
	{
		 CloseableHttpClient httpclient=nssl();
		// CloseableHttpClient httpclient = HttpClients.createDefault();
		 HttpPost hp=new HttpPost(url);
		RequestConfig config = RequestConfig.custom().setConnectTimeout(10000).setSocketTimeout(30000).build();
		hp.setConfig(config);
		 String re=null;
		 List<NameValuePair> fps=new ArrayList<NameValuePair>();
		 UrlEncodedFormEntity entity=null;
		 if(params!=null)
		 {
			 for (Entry<String, String> en : params.entrySet()) {
				 fps.add(new BasicNameValuePair(en.getKey(), en.getValue()));
			 }
		 }
		 try {
			 entity=new UrlEncodedFormEntity(fps,"UTF-8");
			 hp.setEntity(entity);
			 CloseableHttpResponse cr=null;
			 cr=httpclient.execute(hp);
			 try{
				 HttpEntity he=cr.getEntity();
				 if(he!=null)
					 re=EntityUtils.toString(he,"UTF-8");
			 }catch(Exception ee)
			 {}finally{
				 cr.close();
			 }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			 try {  
	                httpclient.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	            } 
		}
		return re;
	}
	
	public static String ssl_postmultipart(String url,Map<String, String> params,String upfilename,File file)
	{
		 CloseableHttpClient httpclient=nssl();
		 HttpPost hp=new HttpPost(url);
		RequestConfig config = RequestConfig.custom().setConnectTimeout(10000).setSocketTimeout(30000).build();
		hp.setConfig(config);
		 MultipartEntityBuilder me=MultipartEntityBuilder.create();
		 me.addBinaryBody(upfilename, file);
		 if(params!=null)
			 for (Entry<String, String> en : params.entrySet()) {
				 me.addTextBody(en.getKey(), en.getValue());
			 }
		 hp.setEntity(me.build());
		 String re=null;
		 try {
			 CloseableHttpResponse cr=null;
			 cr=httpclient.execute(hp);
			 try{
				 HttpEntity he=cr.getEntity();
				 if(he!=null)
					 re=EntityUtils.toString(he,"UTF-8");
			 }catch(Exception ee)
			 {}finally{
				 cr.close();
			 }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			 try {  
	                httpclient.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	            } 
		}
		return re;
	}
	public static String ssl_postbody(String url,String body)
	{
		 CloseableHttpClient httpclient=nssl();
		 HttpPost hp=new HttpPost(url);
		RequestConfig config = RequestConfig.custom().setConnectTimeout(10000).setSocketTimeout(30000).build();
		hp.setConfig(config);
		 StringEntity se=new StringEntity(body, Charset.forName("utf-8"));
		 hp.setEntity(se);
		 String re=null;
		 try {
			 CloseableHttpResponse cr=null;
			 cr=httpclient.execute(hp);
			 try{
				 HttpEntity he=cr.getEntity();
				 if(he!=null)
					 re=EntityUtils.toString(he,"UTF-8");
			 }catch(Exception ee)
			 {}finally{
				 cr.close();
			 }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			 try {  
	                httpclient.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	            } 
		}
		return re;
	}
	public static String first2Upper(String str)
	{
		if(str==null)
			return null;
		char[] cs=str.toCharArray();
		cs[0]-=32;
		return String.valueOf(cs);
	}
	
}