package com.mandi.common; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.charset.Charset; import java.security.KeyStore; import java.security.cert.CertificateException; 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.CookieStore; import org.apache.http.client.config.CookieSpecs; 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.client.protocol.HttpClientContext; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.conn.util.PublicSuffixMatcher; import org.apache.http.conn.util.PublicSuffixMatcherLoader; import org.apache.http.cookie.CookieSpecProvider; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.cookie.BasicClientCookie; import org.apache.http.impl.cookie.DefaultCookieSpecProvider; import org.apache.http.impl.cookie.RFC6265CookieSpecProvider; import org.apache.http.message.BasicNameValuePair; import org.apache.http.ssl.SSLContexts; import org.apache.http.util.EntityUtils; import org.apache.log4j.Logger; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; /** * @author mengly * @version 创建时间:2015年9月18日 下午7:53:25 * 类说明 :包依赖:httpclient,之所以采用singleton,是因为有hcontext */ @Service @Scope("singleton") public class Httpmethod { private Logger log=Logger.getLogger(Httpmethod.class); private HttpClientContext hcontext=null; private CookieStore cookiestore=null; public String keyfile="f:\\tomcat.keystore"; public String key="123456"; public CloseableHttpClient ssl() { CloseableHttpClient httpclient = null; try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream instream = new FileInputStream(new File(keyfile)); try { // 加载keyStore d:\\tomcat.keystore trustStore.load(instream, key.toCharArray()); } catch (CertificateException e) { e.printStackTrace(); } finally { try { instream.close(); } catch (Exception ignore) { } } // 相信自己的CA和所有自签名的证书 SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()).build(); // 只允许使用TLSv1协议 SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.getDefaultHostnameVerifier()); httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); }catch(Exception ee){ ee.printStackTrace(); } return httpclient; } /** * new ssl(); * @return * @author mengly * @version 创建时间:2015年10月13日 上午11:21:15 */ public 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 String post(String url,Map params) { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost hp=new HttpPost(url); String re=null; List fps=new ArrayList(); UrlEncodedFormEntity entity=null; if(params!=null) { for (Entry en : params.entrySet()) { fps.add(new BasicNameValuePair(en.getKey(), en.getValue())); } } try { entity=new UrlEncodedFormEntity(fps,"UTF-8"); hp.setEntity(entity); CloseableHttpResponse cr=null; if(hcontext!=null) cr= httpclient.execute(hp, hcontext); else 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) { log.info("error"); }finally{ try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return re; } public String ssl_post(String url,Map params) { CloseableHttpClient httpclient=nssl(); // CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost hp=new HttpPost(url); String re=null; List fps=new ArrayList(); UrlEncodedFormEntity entity=null; if(params!=null) { for (Entry en : params.entrySet()) { fps.add(new BasicNameValuePair(en.getKey(), en.getValue())); } } try { entity=new UrlEncodedFormEntity(fps,"UTF-8"); hp.setEntity(entity); CloseableHttpResponse cr=null; if(hcontext==null) cr=httpclient.execute(hp); else cr=httpclient.execute(hp, hcontext); try{ HttpEntity he=cr.getEntity(); if(he!=null) re=EntityUtils.toString(he,"UTF-8"); }catch(Exception ee) {}finally{ cr.close(); } } catch (Exception e) { log.info("error"); }finally{ try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return re; } public String ssl_postbody(String url,String body) { CloseableHttpClient httpclient=nssl(); HttpPost hp=new HttpPost(url); StringEntity se=new StringEntity(body, Charset.forName("utf-8")); hp.setEntity(se); String re=null; try { CloseableHttpResponse cr=null; if(hcontext==null) cr=httpclient.execute(hp); else cr=httpclient.execute(hp, hcontext); try{ HttpEntity he=cr.getEntity(); if(he!=null) re=EntityUtils.toString(he,"UTF-8"); }catch(Exception ee) {}finally{ cr.close(); } } catch (Exception e) { log.info("error"); }finally{ try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return re; } public String get(String url) { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet hp=new HttpGet(url); String re=null; try { CloseableHttpResponse cr=null; if(hcontext==null) cr=httpclient.execute(hp); else cr=httpclient.execute(hp, hcontext); 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(); log.info("error"); }finally{ try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return re; } public String ssl_get(String url) { CloseableHttpClient httpclient =nssl(); HttpGet hp=new HttpGet(url); String re=null; try { CloseableHttpResponse cr=null; if(hcontext==null) cr=httpclient.execute(hp); else cr=httpclient.execute(hp, hcontext); 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(); log.info("error"); }finally{ try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return re; } public String upload(String url,String file) { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost hp=new HttpPost(url); String re=null; FileBody fb=new FileBody(new File(file)); StringBody comment=new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN); HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("bin", fb).addPart("comment", comment).build(); try { hp.setEntity(reqEntity); CloseableHttpResponse cr= httpclient.execute(hp); try{ HttpEntity he=cr.getEntity(); if(he!=null) re=EntityUtils.toString(he,"UTF-8"); EntityUtils.consume(he); }catch(Exception ee) {}finally{ cr.close(); } } catch (Exception e) { log.info("error"); }finally{ try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return re; } public boolean clearcontext() { this.cookiestore.clear(); this.cookiestore=null; this.hcontext=null; System.gc(); return true; } public boolean createcontext() { hcontext = HttpClientContext.create(); cookiestore=new BasicCookieStore(); PublicSuffixMatcher publicSuffixMatcher = PublicSuffixMatcherLoader.getDefault(); Registry registry = RegistryBuilder . create() .register(CookieSpecs.DEFAULT, new DefaultCookieSpecProvider(publicSuffixMatcher)) .register(CookieSpecs.STANDARD, new RFC6265CookieSpecProvider(publicSuffixMatcher)).build(); hcontext.setCookieSpecRegistry(registry); hcontext.setCookieStore(cookiestore); return true; } public boolean addcookie(String name,String value) { if(this.hcontext==null||this.cookiestore==null) return false; BasicClientCookie bc=new BasicClientCookie(name, value); this.cookiestore.addCookie(bc); return true; } public boolean clearcooike() { if(this.hcontext==null||this.cookiestore==null) return false; cookiestore.clear(); return true; } }