简单封装的httpclient

来源:互联网 发布:武汉网络推广外包 编辑:程序博客网 时间:2024/05/22 14:17
package com.<span style="font-family: Arial, Helvetica, sans-serif;">****</span><span style="font-family: Arial, Helvetica, sans-serif;">.util;</span>import java.io.IOException;import java.io.InputStream;import java.net.SocketTimeoutException;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import java.util.List;import javax.net.ssl.SSLContext;import me.***.elog.Log;import me.***.elog.LogFactory;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;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.config.ConnectionConfig;import org.apache.http.conn.ConnectTimeoutException;import org.apache.http.conn.ConnectionPoolTimeoutException;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.SSLContexts;import org.apache.http.entity.ContentType;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicHeader;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import com.****.weixin.common.WeixinConstant;public class HttpCallTool {Log log = LogFactory.getLog(HttpCallTool.class);    //连接超时时间,默认10秒    private int socketTimeout = 10000;    //传输超时时间,默认30秒    private int connectTimeout = 30000;    //请求器的配置    private RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();;    //HTTP请求器    private HttpClient httpClient;    public HttpCallTool(String payType,String tradeType) throws UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, IOException{ init(payType,tradeType);}public HttpCallTool(){httpClient = HttpClients.createDefault();}    @SuppressWarnings("deprecation")private void init(String payType,String tradeType) throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyManagementException {        KeyStore keyStore = KeyStore.getInstance("PKCS12");        InputStream instream =null;        SSLContext sslcontext=null;        try{        if("weixin".equals(payType)){         if("JSAPI".equals(tradeType)){         instream = HttpCallTool.class.getResourceAsStream(WeixinConstant.getCertLocalPath());//加载本地的证书进行https加密传输              keyStore.load(instream, WeixinConstant.getCertPassword().toCharArray());//设置证书密码      sslcontext = SSLContexts.custom()                    .loadKeyMaterial(keyStore, WeixinConstant.getCertPassword().toCharArray())                    .build();         }else if("APP".equals(tradeType)){         instream = HttpCallTool.class.getResourceAsStream(WeixinConstant.getCertLocalPathForApp());//加载本地的证书进行https加密传输              keyStore.load(instream, WeixinConstant.getCertPasswordForApp().toCharArray());//设置证书密码     sslcontext = SSLContexts.custom()                    .loadKeyMaterial(keyStore, WeixinConstant.getCertPasswordForApp().toCharArray())                    .build();         }        }        } catch (CertificateException e) {         log.error(e.getMessage(),e);         } catch (NoSuchAlgorithmException e) {         log.error(e.getMessage(),e);         } finally {             instream.close();         }        // Trust own CA and all self-signed certs               // Allow TLSv1 protocol only        @SuppressWarnings("deprecation")SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(                sslcontext,                new String[]{"TLSv1"},                null,                SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);ConnectionConfig connectionConfig = ConnectionConfig.custom()                .setBufferSize(4128)                .build();        httpClient = HttpClients.custom().setDefaultConnectionConfig(connectionConfig).setSSLSocketFactory(sslsf).build();    }//发送key - value数据public  String callService(List<NameValuePair> list,String url) throws Exception{String responseStr="";try {HttpPost httpPost = new HttpPost(url);UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,HTTP.UTF_8);httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, ContentType.APPLICATION_FORM_URLENCODED.toString()));httpPost.setEntity(entity);log.info("rpc请求开始:" + httpPost.getURI());HttpResponse response = httpClient.execute(httpPost);if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){HttpEntity entityReponse = response.getEntity();if (entityReponse != null){responseStr=Util.readStream(entityReponse.getContent(), "utf-8");log.info(responseStr);}else{throw new Exception("请求结果为空!");}}} catch (Exception e) {log.error("通信失败",e);throw new Exception("请求超时!");}finally{httpClient.getConnectionManager().shutdown(); }return responseStr;}//发送json数据public  String callService(String httpJsonMessage,String url) throws Exception{String responseStr="";try {HttpPost httpPost = new HttpPost(url);StringEntity entity = new StringEntity(httpJsonMessage, "utf-8");entity.setContentType("application/json");httpPost.setEntity(entity);log.info("rpc请求开始:" + httpPost.getURI());HttpResponse response = httpClient.execute(httpPost);if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){HttpEntity entityReponse = response.getEntity();if (entityReponse != null){responseStr=Util.readStream(entityReponse.getContent(), "utf-8");log.info(responseStr);}else{throw new Exception("请求结果为空!");}}} catch (Exception e) {log.error("通信失败",e);throw new Exception("请求超时!");}finally{httpClient.getConnectionManager().shutdown(); }return responseStr;}//发送json数据  public  String callGetService(String url) throws Exception{String responseStr="";try {HttpGet httpGet = new HttpGet(url);HttpResponse response = httpClient.execute(httpGet);if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){HttpEntity entityReponse = response.getEntity();if (entityReponse != null){responseStr=Util.readStream(entityReponse.getContent(), "utf-8");log.info(responseStr);}else{throw new Exception("请求结果为空!");}}} catch (Exception e) {log.error(e.getMessage());throw new Exception("请求超时!");}finally{httpClient.getConnectionManager().shutdown(); }return responseStr;}//发送xml报文数据public String sendPost(String url, String postDataXml) {        String result = null;        HttpPost httpPost = new HttpPost(url);        httpPost.setConfig(requestConfig);        //得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别        StringEntity postEntity = new StringEntity(postDataXml, "UTF-8");        httpPost.addHeader("Content-Type", "text/xml");        httpPost.addHeader("Host", "api.mch.weixin.qq.com");        httpPost.setEntity(postEntity);        //设置请求器的配置        httpPost.setConfig(requestConfig);        log.info("executing request" + httpPost.getRequestLine());        try {            HttpResponse response = httpClient.execute(httpPost);            HttpEntity entity = response.getEntity();            result = EntityUtils.toString(entity, "UTF-8");        } catch (ConnectionPoolTimeoutException e) {            log.error("http get throw ConnectionPoolTimeoutException(wait time out)",e);        } catch (ConnectTimeoutException e) {        log.error("http get throw ConnectTimeoutException",e);        } catch (SocketTimeoutException e) {        log.error("http get throw SocketTimeoutException",e);        } catch (Exception e) {        log.error("http get throw Exception",e);        } finally {            httpPost.abort();        }        return result;    }}

0 0
原创粉丝点击